泛型问题-可能由于类型擦除而无法编译代码
||
我有一些类似的代码:
public class A<E> {
protected E value;
public E getValue() {
return value;
}
public void setValue(E value) {
this.value = value;
}
}
然后我有一个扩展该类的类,称为B
public class B extends A<Boolean> {
// B has some other code, but doesn\'t edit the set/get methods
}
然后,我将这两个类编译为A.class,B.class,它们是JARed。
然后我有以下代码:
public class C {
// ... snip
B var = new B();
var.setValue(true);
if(var.getValue()) {
// etc
}
// ... snip
}
尝试编译它会导致错误,告诉我var.getValue作为对象返回。我知道这是一个布尔值,当我将C包含在A / B java文件中并立即进行全部编译时,它可以正常工作。
但是,当我分别将A / B编译为C时,出现了一个问题,它认为var.getValue是一个Object。
我一直在阅读有关泛型和类型擦除的信息,但我找不到解决它的方法。
我正在尝试将A / B构建到像C这样的类使用的包中,但是如果我必须强制转换所有getValues,那么泛型就没有意义了。
我要去哪里错了?
(实际的代码在此github存储库中,A和B的有问题的类是ModOption / ModBooleanOption。我那里没有C代码,但这很明显)
编辑:我正在使用JavaSE6进行编译和混淆。奇怪的是,如果我定期编译然后再尝试此示例,则效果也很好。我开始怀疑混淆器。
这个问题解决了;我进行了进一步测试,发现混淆器破坏了泛型,我不知道该怎么做,也不在乎为什么。我将与它的维护者联系。
没有找到相关结果
已邀请:
1 个回复
嘘伪
来重现此问题。如果使用的是IDE,请检查包含C的项目,以确保Java VM和源代码支持为1.5或更高版本。