### Question:
Provider { public static <P, C extends P> Provider useClass(Class<P> provide, Class<C> useClass) { return new Provider(provide, useClass != null ? useClass : provide, null); } 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 testUseClass() { Provider p = useClass(Number.class, Integer.class); assertThat(p.getProvide()).isEqualTo(Number.class); assertThat(p.getUseClass()).isEqualTo(Integer.class); assertThat(p.getUseValue()).isNull(); assertThat(p.toString()).contains("java.lang.Number -> useClass: java.lang.Integer"); }