带有类型标识符的抽象类 - 不允许使用原语?

时间:2014-02-24 13:44:07

标签: java generics

我有一个问题,提到这篇文章:Java generics to enforce return type of abstract method和Björn特别回答:https://stackoverflow.com/a/1627646

是否可以将原始数据类型用于数据类型说明符? 具体来说,我有一个问题,我有一个抽象类“矩阵”和两个继承自“矩阵”的子类。一个是“ComplexMatrix”,它基本上是一个复杂条目的矩阵。因此,我创建了一个类“Complex”。另一个是“正常”双矩阵。

public abstract class Matrix<T> {
    public abstract T getValue(int r, int c);
}

public class ComplexMatrix extends Matrix<Complex> {
    public Complex getValue(int r, int c){
        return null;
    }
}

public class DoubleMatrix extends Matrix<double> {
    public double getValue(int r, int c){
        return double.NaN;
    }
}

第一个,ComplexMatrix,可以工作。第二个不是。它说&lt; double&gt;:“意外类型必需参考找到double”。

如果我使用Wrapper类Double

public class DoubleMatrix extends Matrix<Double> {
    public double getValue(int r, int c){
        return Double.NaN;
    }
}

错误消息说“返回类型double与Double不兼容”,其中T是类型变量。

有人可以告诉我为什么这不起作用?为什么它适用于“&lt; String&gt;”?

感谢。

1 个答案:

答案 0 :(得分:0)

如果类型参数是无界的,Java编译器会将泛型类型中的所有类型参数替换为其边界或对象。在您的示例中,double是基本类型。所以你得到了这个错误。

点击此链接http://docs.oracle.com/javase/tutorial/java/generics/erasure.html