我正在尝试使用 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()
我希望这会返回一个新创建的 A 类对象,FactoryEnum.getEnumByClassName("CLASS_A").getSupplier().execute()
而这将返回新创建的 B 类对象。虽然它返回给我一个 Lambda。为什么它返回 lambda 而不是IConverter
. 我怎么能得到呢?