bfo*_*our 5 java eclipse generics
我有以下代码:
一个模拟a ValueContainer<P>和实体之间映射的类E.(例如,一个复选框(ValueContainer)和一个具有布尔值的东西):
public abstract class ObjValContainerMapper<E, P> {
private ValueContainer<P> provider;
public ObjValContainerMapper(ValueContainer<P> provider) {
this.provider = provider;
}
public abstract P getValue(E entity);
public abstract void setValue(E entity, P value);
...
}
Run Code Online (Sandbox Code Playgroud)
界面ValueContainer<P>:
public interface ValueContainer<T> {
T getValue();
void setValue(T value);
}
Run Code Online (Sandbox Code Playgroud)
自定义复选框:
public class AdvancedCheckBox extends JCheckBox implements ValueContainer<Boolean>
Run Code Online (Sandbox Code Playgroud)
并且一些代码意外地不起作用:
AdvancedCheckBox chckbxBindToDrive = new AdvancedCheckBox(
"Bind to Drive");
ObjValContainerMapper<IndexSpec, Boolean> bindToDriveMapper =
new ObjValContainerMapper<IndexSpec, Boolean>(chckbxBindToDrive) {
@Override
public Boolean getValue(IndexSpec entity) {
if (entity == null) {
return false;
}
return entity.isBindToDrive();
}
@Override
public void setValue(IndexSpec entity, Boolean value) {
entity.setBindToDrive(value);
}
};
Run Code Online (Sandbox Code Playgroud)
代码无法编译.显示的错误是" 构造函数ObjValContainerMapper(AdvancedCheckBox)未定义 ".除了AdvancedCheckBox明确声明之外,Eclipse还建议让AdvancedCheckBox实现ValueContainer或将参数chckbxBindToDrive转换为ValueContainer implements ValueContainer<Boolean>.奇怪的是,我重用了使用Java 6构建的旧项目中的代码,在这种情况下大约是.相同的代码工作正常.Java 7有什么变化,或者我错过了什么?
环境:
感谢评论中的所有故障排除建议。
造成这种行为的原因是我将 ValueContainer 接口复制到两个不同的包中,因为我认为考虑到 Eclipse 似乎没有首先找到它,它会丢失(感谢 @sasankad 提出清理项目的建议)。我希望这对其他人仍然有帮助,因为编译器和 Eclipse 分别提供的错误消息和解决方案建议不是而且相当具有误导性。
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |