使用Java8供应商的枚举工厂

使用Java8供应商的枚举工厂,java,lambda,java-8,factory,supplier,Java,Lambda,Java 8,Factory,Supplier,我正在尝试使用Java8Lambda和Supplier接口创建对象(实现工厂模式) public static void main(final String[] args) { FactoryEnum.getEnumByClassName("CLASS_A").getSupplier().execute(); FactoryEnum.getEnumByClassName("CLASS_B").getSupplier().execute();

我正在尝试使用Java8Lambda和
Supplier
接口创建对象(实现工厂模式)

public static void main(final String[] args) {
    FactoryEnum.getEnumByClassName("CLASS_A").getSupplier().execute();
    FactoryEnum.getEnumByClassName("CLASS_B").getSupplier().execute();
  }




当我调用
FactoryEnum.getEnumByClassName(“CLASS_A”).getSupplier().execute()
时,我希望它返回一个新创建的类A对象和
FactoryEnum.getEnumByClassName(“CLASS_A”).getSupplier().execute()
并返回一个Lambda,同时返回一个新创建的类B对象。为什么它返回lambda而不是
IConverter
的对象。我怎样才能得到呢

CLASS_A(() -> A::new)
意味着

也就是说

CLASS_A(() -> { return () -> { new A(); }; })
这不是你想要表达的

试一试


或者
CLASS_A(()->new A())
:)问题在我提交答案之前就结束了。虽然这是一个拼写错误,但我认为解释一下为什么它是一个拼写错误可能是有用的。顺便说一句,在这里,创建一个与已有的
valueOf
方法相同的方法
getEnumByClassName
没有任何意义,尤其是当它唯一的特性,独特的名称,是误导性的,因为参数不是类名。@Michael:谢谢你的帮助。我故意写这篇文章,因为实际上我得到了A::new to new A()的解释,而它是()->{new A()}。@Holger是的,完全有道理。谢谢你提到这件事。
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");
  }

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