枚举工厂使用 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)