枚举工厂使用 Java 8 个供应商
Enum factory using Java 8 supplier
我正在尝试使用 Java 8 lambda 和 Supplier
接口创建对象(实施工厂模式)。
public static void main(final String[] args) {
FactoryEnum.getEnumByClassName("CLASS_A").getSupplier().execute();
FactoryEnum.getEnumByClassName("CLASS_B").getSupplier().execute();
}
enum FactoryEnum {
CLASS_A(() -> A::new),
CLASS_B(() -> B::new);
private final Supplier<IConverter> supplier;
FactoryEnum(final Supplier<IConverter> supplier) {
this.supplier = supplier;
}
public static FactoryEnum getEnumByClassName(final String className) {
return FactoryEnum.valueOf(className);
}
public IConverter getSupplier() {
return supplier.get();
}
}
interface IConverter {
void execute();
}
class A implements IConverter {
@Override
public void execute() {
System.out.println("Inside A"); //$NON-NLS-1$
}
}
class B implements IConverter {
@Override
public void execute() {
System.out.println("Inside B");
}
}
当我调用 FactoryEnum.getEnumByClassName("CLASS_A").getSupplier().execute()
时,我期待这个 return 一个新创建的 Class A 和 FactoryEnum.getEnumByClassName("CLASS_A").getSupplier().execute()
的对象,这个 return 新创建的对象Class B 的对象。当它 return 给我一个 Lambda 时。为什么它是 returning lambda 而不是 IConverter
的对象。我怎样才能得到它?
CLASS_A(() -> A::new)
表示
CLASS_A(() -> { return A::new; })
这意味着
CLASS_A(() -> { return () -> { new A(); }; })
这不是您想要传达的内容。
尝试
CLASS_A(A::new)
我正在尝试使用 Java 8 lambda 和 Supplier
接口创建对象(实施工厂模式)。
public static void main(final String[] args) {
FactoryEnum.getEnumByClassName("CLASS_A").getSupplier().execute();
FactoryEnum.getEnumByClassName("CLASS_B").getSupplier().execute();
}
enum FactoryEnum {
CLASS_A(() -> A::new),
CLASS_B(() -> B::new);
private final Supplier<IConverter> supplier;
FactoryEnum(final Supplier<IConverter> supplier) {
this.supplier = supplier;
}
public static FactoryEnum getEnumByClassName(final String className) {
return FactoryEnum.valueOf(className);
}
public IConverter getSupplier() {
return supplier.get();
}
}
interface IConverter {
void execute();
}
class A implements IConverter {
@Override
public void execute() {
System.out.println("Inside A"); //$NON-NLS-1$
}
}
class B implements IConverter {
@Override
public void execute() {
System.out.println("Inside B");
}
}
当我调用 FactoryEnum.getEnumByClassName("CLASS_A").getSupplier().execute()
时,我期待这个 return 一个新创建的 Class A 和 FactoryEnum.getEnumByClassName("CLASS_A").getSupplier().execute()
的对象,这个 return 新创建的对象Class B 的对象。当它 return 给我一个 Lambda 时。为什么它是 returning lambda 而不是 IConverter
的对象。我怎样才能得到它?
CLASS_A(() -> A::new)
表示
CLASS_A(() -> { return A::new; })
这意味着
CLASS_A(() -> { return () -> { new A(); }; })
这不是您想要传达的内容。
尝试
CLASS_A(A::new)