泛型问题-可能由于类型擦除而无法编译代码

|| 我有一些类似的代码:
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进行编译和混淆。奇怪的是,如果我定期编译然后再尝试此示例,则效果也很好。我开始怀疑混淆器。 这个问题解决了;我进行了进一步测试,发现混淆器破坏了泛型,我不知道该怎么做,也不在乎为什么。我将与它的维护者联系。     
已邀请:
我只能通过在编译C时将编译器设置为
javac -source 1.4
来重现此问题。如果使用的是IDE,请检查包含C的项目,以确保Java VM和源代码支持为1.5或更高版本。     

要回复问题请先登录注册