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
}