### Question:
InjectableFactory { public TI get() { return get(null); } protected  InjectableFactory(Function<? super TP, ? extends TI> creator, CacheProvider<TI> cacheProvider); static InjectableFactory<TP, TI> of(Function<TP, TI> objectCreator); static InjectableFactory<TP, TI> of(Function<TP, TI> objectCreator, CacheProvider cacheProvider); TI get(); TI get(TP param); InjectableFactory<TP, TI> setObjectCreator(Function<TP, TI> objectCreator); InjectableFactory<TP, TI> reset(); InjectableFactory<TP, TI> setInstance(TP param, TI instance); InjectableFactory<TP, TI> setInstance(TI instance); InjectableFactory<TP, TI> clearCache();  }### Answer:
@Test public void testGet() { InjectableFactory._0<I1> i1Fact = InjectableFactory._0.of(C::new); assertEquals(C.class, i1Fact.get().getClass()); assertNotSame(i1Fact.get(), i1Fact.get()); i1Fact = InjectableFactory._0.of(C0::new, CacheGlobal.get()); assertEquals(C0.class, i1Fact.get().getClass()); assertSame(i1Fact.get(), i1Fact.get()); i1Fact.setObjectCreator((p) -> new C()); assertEquals(C.class, i1Fact.get().getClass()); i1Fact.reset(); InjectableFactory<P1, I1> i2Fact = InjectableFactory.of(C1::new); assertEquals(C1.class, i2Fact.get(new P1()).getClass()); }