### Question:
Provider { public static Provider[] of(Class<?>... classes) { return Stream.of(classes) .map(Provider::of) .toArray(Provider[]::new); } private  Provider(Class<?> provide, Class<?> useClass, @Nullable Object useValue); static Provider[] of(Class<?>... classes); static Provider of(Class<P> clazz); static Provider useClass(Class<P> provide, Class<C> useClass); static Provider useValue(Class<P> provide, V useValue); Class<?> getProvide(); @Nullable Object getUseValue(); Class<?> getUseClass(); @Override String toString();  }### Answer:
@Test public void testOf() { Provider[] ps = of(String.class, Integer.class); assertThat(ps).hasSize(2); assertThat(ps[0].getProvide()).isEqualTo(String.class); assertThat(ps[0].getUseClass()).isEqualTo(String.class); assertThat(ps[0].getUseValue()).isNull(); assertThat(ps[0].toString()).contains("java.lang.String -> useClass: java.lang.String"); assertThat(ps[1].getProvide()).isEqualTo(Integer.class); assertThat(ps[1].getUseClass()).isEqualTo(Integer.class); assertThat(ps[1].getUseValue()).isNull(); assertThat(ps[1].toString()).contains("java.lang.Integer -> useClass: java.lang.Integer"); }