使用java8的enum工厂

1tuwyuhd  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(377)

**结案。**此问题不可复制或由打字错误引起。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

上个月关门了。
改进这个问题
我尝试使用Java8Lambda和 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而不是一个对象 IConverter . 我怎么能得到呢?

sigwle7e

sigwle7e1#

CLASS_A(() -> A::new)

方法

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

这意味着

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

这不是你想要表达的。
尝试

CLASS_A(A::new)

相关问题