Java 泛型问题-无法编译代码,可能是由于类型擦除
我有一些类似的代码:Java 泛型问题-无法编译代码,可能是由于类型擦除,java,compiler-errors,type-erasure,Java,Compiler Errors,Type Erasure,我有一些类似的代码: public class A<E> { protected E value; public E getValue() { return value; } public void setValue(E value) { this.value = value; } } 试图编译此文件会导致一个错误,告诉我var.getValue作为对象返回。我知道这是一个布尔值,当我将C和
public class A<E> {
protected E value;
public E getValue() {
return value;
}
public void setValue(E value) {
this.value = value;
}
}
试图编译此文件会导致一个错误,告诉我var.getValue作为对象返回。我知道这是一个布尔值,当我将C和a/B java文件一起包含并一次性编译时,它工作得很好
但是,当我将A/B单独编译为C时,我遇到了一个问题,即它认为var.getValue是一个对象
我一直在读关于泛型和类型擦除的书,但我想不出解决的办法
我试图将A/B构建到C类使用的包中,但如果我必须强制转换所有GetValue,那么泛型就没有意义了
我哪里做错了
(实际代码在中,有问题的类A和B是ModOption/modbooleanpoption。我没有C代码,但很明显)
编辑:我正在使用JavaSE6编译和模糊处理。奇怪的是,如果我定期编译,然后尝试这个例子,它也可以正常工作。我开始怀疑迷惑者了
这个问题解决了,;我进一步测试,发现模糊器正在破坏泛型,我不知道怎么做,也不在乎为什么。我会联系它的维护人员。在编译C时,我只能通过将编译器设置为
javac-source 1.4
来重现这一点。如果您使用的是IDE,请检查包含C的项目,以确保您的Java VM和源代码支持在1.5或以上。您使用的SDK是什么?您的示例使用jdk1.6.0_25(单独或一起)对我来说编译得很好。@jkraybill Java SDK 6。在生产版本中,代码运行时遇到了一个模糊器(不是我的选择),这是唯一的区别。出于好奇,既然问题出在模糊器上,您能分享一下您使用的是哪一个吗?Java SDK 6。在生产版本中,代码运行时遇到了一个模糊器(不是我的选择),这是唯一的区别。所有者不会升级。结果我不得不放弃它,只是不使用泛型。
public class B extends A<Boolean> {
// B has some other code, but doesn't edit the set/get methods
}
public class C {
// ... snip
B var = new B();
var.setValue(true);
if(var.getValue()) {
// etc
}
// ... snip
}