我有以下代码:
一个对ValueContainer<P>
和Entity E
之间的映射进行建模的类。 (例如,一个复选框(ValueContainer)和具有 boolean 值的内容):
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);
...
}
接口(interface)
ValueContainer<P>
:public interface ValueContainer<T> {
T getValue();
void setValue(T value);
}
自定义复选框:
public class AdvancedCheckBox extends JCheckBox implements ValueContainer<Boolean>
而且某些代码出乎意料地不起作用:
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);
}
};
该代码无法编译。显示的错误是“。构造函数ObjValContainerMapper(AdvancedCheckBox)是未定义的”。 Eclipse建议,除其他选择外,尽管AdvancedCheckBox显式声明了
implements ValueContainer<Boolean>
,也让AdvancedCheckBox实现ValueContainer或将参数chckbxBindToDrive强制转换为ValueContainer。足够奇怪的是,我重用了用Java 6构建的旧项目中的代码,在这种情况下,大约是。相同的代码工作正常。 Java 7有什么改变吗?
环境:
最佳答案
注释中所有疑难解答的建议。
造成这种现象的原因是,我将ValueContainer接口(interface)复制了两次到两个不同的程序包中,因为我认为它将丢失,因为Eclipse似乎没有首先找到它(建议使用@sasankad清理项目)。
我希望这对其他人还是有帮助的,因为分别由编译器和Eclipse提供的错误消息和解决方案建议不是,而是会引起误解。
关于构造函数<X,Y>(C <Y>)和接口(interface)C <Y>的Java泛型异常行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22162832/