-2

我正在尝试使用 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. 我怎么能得到呢?

4

1 回答 1

3
CLASS_A(() -> A::new)

方法

CLASS_A(() -> { return A::new; })

意思是

CLASS_A(() -> { return () -> { new A(); }; })

这不是你想要传达的。

尝试

CLASS_A(A::new)
于 2020-11-27T13:25:42.727 回答