首页 > 解决方案 > 如何定义一个枚举,其中有零个或多个消费者对公共接口的实现进行操作?

问题描述

我有类似下面的代码(尽可能简化),它编译:

class Test {

  enum TestEnum {
    ELEMENT1(Test::methodUsingTestclass1);

    <T extends TestInterface> TestEnum(Consumer<T>... consumers) {
    }
  }

  static void methodUsingTestclass1(TestClass1 testClass1) {
  }

  static void methodUsingTestclass2(TestClass2 testClass2) {
  }

  interface TestInterface {
  }

  class TestClass1 implements TestInterface {
  }

  class TestClass2 implements TestInterface {
  }

}

现在我希望能够Consumer在我的 s 中指定一个可变参数enum

enum TestEnum {
  ELEMENT1(Test::methodUsingTestclass1, Test::methodUsingTestclass2);

  <T extends TestInterface> TestEnum(Consumer<T>... consumers) {
  }
}

这不再编译:

类型参数 T 具有不兼容的上限:Test.TestClass1 和 Test.TestClass2

T实现TestInterface,我想定义一个或多个Consumers 操作T。换句话说,方法引用的列表接受的实现类的方法TestInterface

我试过这个:

enum TestEnum {
  ELEMENT1(Test::methodUsingTestclass1, Test::methodUsingTestclass2);

  <T extends TestInterface> TestEnum(Consumer<? extends T>... consumers) {
  }
}

但我仍然得到相同的编译错误。

如何修改代码,使其构造函数接受零个或多个Consumers 在不同的实现上运行TestInterface

标签: javagenericsenums

解决方案


推荐阅读