, , , , ,
.
Supplier :
return SomeEntityImplementation::new;
:
if (myCachedObject != null){
return (()-> myCachedObject);
}
return SomeEntityImplementation::new;
.
Supplier Supplier : Supplier.get().
, Supplier , ( Supplier), : factory,
, , Supplier<T> as, Eran Dasblinkenlight.
Supplier factory, .
Supplier , , Java Reflection.
, Enum, :
public enum MyBaseClassFactory {
ENUM_A (A::new),
ENUM_B (B::new),
ENUM_C (C::new),
ENUM_D (D::new);
private Supplier<BaseClass> supplier;
MyBaseClassFactory (Supplier<BaseClass> supplier){
this.supplier = supplier;
}
public BaseClass createObject(){
return supplier.get();
}
}
:
BaseClass base = MyBaseClassFactory.ENUM_A.createObject();
Supplier Reflection ( ) .
, Reflection:
public enum MyEnumFactoryClass {
ENUM_A(A.class), ENUM_B(B.class), ENUM_C(C.class), ENUM_D(D.class);
private Class<BaseClass> clazz;
MyEnumFactoryClass(Class<BaseClass> clazz) {
this.clazz = clazz;
}
public BaseClass createObject() {
return clazz.newInstance();
}
}
, , :
public enum MyEnumFactoryClass {
ENUM_A {
@Override
public BaseClass createObject() {
return new A();
}
},
ENUM_B {
@Override
public BaseClass createObject() {
return new B();
}
},
ENUM_C {
@Override
public BaseClass createObject() {
return new C();
}
},
ENUM_D {
@Override
public BaseClass createObject() {
return new D();
}
};
public abstract BaseClass createObject();
}
, , Supplier, Map<String, Supplier<BaseClass>>.