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

Java 具有类型标识符的抽象类-不允许使用原语?,java,generics,Java,Generics,我有一个关于这篇文章的问题:尤其是比约恩的回答: 难道不能为数据类型说明符使用基本数据类型吗? 具体来说,我有一个问题,我有一个抽象类“矩阵”和两个子类继承自“矩阵”。一种是“ComplexMatrix”,它基本上是一个包含复杂项的矩阵。因此,我创建了一个类“Complex”。另一个是“正常”双矩阵 public abstract class Matrix<T> { public abstract T getValue(int r, int c); } public cla

我有一个关于这篇文章的问题:尤其是比约恩的回答:

难道不能为数据类型说明符使用基本数据类型吗? 具体来说,我有一个问题,我有一个抽象类“矩阵”和两个子类继承自“矩阵”。一种是“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;
    }
}
公共抽象类矩阵{
公共摘要T getValue(intr,intc);
}
公共类ComplexMatrix扩展矩阵{
公共复合体getValue(int r,int c){
返回null;
}
}
公共类双矩阵扩展矩阵{
公共双getValue(int r,int c){
返回double.NaN;
}
}
第一个是ComplexMatrix,它可以工作。第二个没有。它对说:“意外类型所需的引用找到了double”

如果我使用双重包装类

public class DoubleMatrix extends Matrix<Double> {
    public double getValue(int r, int c){
        return Double.NaN;
    }
}
公共类DoubleMatrix扩展了矩阵{
公共双getValue(int r,int c){
返回Double.NaN;
}
}
错误消息说,“返回类型double与double不兼容”,其中T是一个类型变量

有人能告诉我为什么这不起作用吗?为什么它与“”一起工作


谢谢。

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


选中此链接

不能将基元类型与泛型一起使用。您已经更改了
矩阵中的类型参数,但没有更改返回类型中的类型参数。
公共双getValue(int r,int c){
=>
公共双getValue(int r,int c){
在上一次尝试中,您不能在泛型中使用原语。因此基于“所以,任何用作泛型的东西都必须可以转换为对象(在本例中,get(0)返回一个对象),而基元类型不是。“因此它们不能在泛型中使用。”从jw23的链接来看,我试图实现的事情无法实现?