java - 具有构建器模式的通用对象
问题描述
我的类中有一个Producer<?, ?> producer
字段,该字段的实现取决于使用构建器模式的给定状态,例如:
private void changeImplementation(int state) {
switch (state) {
case 0:
producer = builder
.setKey(Long.class)
.setValue(String.class)
.setOtherStuff(...)
.build() // return the object with correct key and value
break;
case 1:
...
}
但是每当我调用 producer 上的方法时(例如使用 types Producer<Long, String>
),就会给出这个错误(Eclipse EE):
The method method(Record<capture#9-of ?,capture#10-of ?>) in the type Producer<capture#9-of ?,capture#10-of ?> is not applicable for the arguments (Record<Long,String>)
在方法调用之前build()
或内部进行强制转换没有帮助。构建模式在项目的其他地方完美运行。
解决方案
问题与构建器模式无关,而是您的producer
字段类型是用 unknown type 调用的?
。因此,您只能将值分配给Producer
作为未知类型子类型的泛型类型的参数。但是,类型是子类型的唯一值?
是null
,因此它确实限制了您可以使用Producer<?,?>
.
要解决这个问题,您必须以不同的方式绑定通用类型的设计事物。
推荐阅读
- javascript - #JavaScript:在小写输入后在函数中切换输入
- python - Python:字符串用 A 或 B 分割
- apache-spark - 并行提交多个作业时 spark-submit 失败
- redux - 使用 React / Redux 在特定情况下检索过滤后的数组长度
- reactjs - 多个导航栏 REACTJS
- python - 使用 Haarcascade 检测到的人脸,如何在不同颜色的相同人脸上绘制边界框
- python - 在 C++ 中估计嵌入式 python 脚本的进度
- javascript - 图像不在画布内旋转
- sql - 如何在分区级别查看分区表的 I/O 统计信息
- javascript - 我试图在单击按钮时禁用/启用下拉菜单