java - 如何定义一个枚举,其中有零个或多个消费者对公共接口的实现进行操作?
问题描述
我有类似下面的代码(尽可能简化),它编译:
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
,我想定义一个或多个Consumer
s 操作T
。换句话说,方法引用的列表接受的实现类的方法TestInterface
。
我试过这个:
enum TestEnum {
ELEMENT1(Test::methodUsingTestclass1, Test::methodUsingTestclass2);
<T extends TestInterface> TestEnum(Consumer<? extends T>... consumers) {
}
}
但我仍然得到相同的编译错误。
如何修改代码,使其构造函数接受零个或多个Consumer
s 在不同的实现上运行TestInterface
?
解决方案
推荐阅读
- azure - 有没有更好的本地读取和全局写入的方法?(设计分布式系统)
- azure-data-factory - 无法将 ADF polybase 文件从 Azure 存储到 Synapse 池(SQL 数据仓库)
- javascript - Node.js 等待 fs.mkdir() 完成后再继续?
- html - 如何隐藏不适合网格的项目?
- sql - 雅典娜 sql date_diff
- powershell - 无法发布到 Azure devops Nuget
- php - 在另一个 php 页面中收到时,发送的 JSON 数组为空
- python - Tensorflow 数据集:有没有办法只修改一定比例的标签?
- excel - 根据另一个工作表中的值在多个单元格中绘制圆圈
- c# - DocuSign JWT 模拟问题