访问泛型类成员的方法期间的ClassCastException

时间:2011-08-17 10:31:33

标签: java generics exception

我收到运行时错误Exception in thread "main" java.lang.ClassCastException: m.compiler.datatypes.Int cannot be cast to java.lang.Integer

以下是代码段:

public abstract class DataType<E> {
protected E value;
...
}

这里是Int类:

public class Int extends DataType<Integer> {

@Override
public DataType<Integer> compare(DataType<Integer> other) {
    if(value > other.value) //here the exception is thrown
        return new Int(1);
    if (value < other.value)
        return new Int(-1);
    return new Int(0);
}

}

实际通话:

        if(lValue instanceof Int) {
            Int lInt = (Int) lValue;
            Int result = (Int) lInt.compare(rInt);

如果我打印里面的值比较值是正确的,但即使我检查

other.value.getClass()

我得到了例外。编译器没有错误,也没有警告。

1 个答案:

答案 0 :(得分:1)

在某些时候,您必须已经为Int分配了value ...而且应该有一个警告。你能value final吗?