我有一个问题,提到这篇文章: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;”?
感谢。
答案 0 :(得分:0)
如果类型参数是无界的,Java编译器会将泛型类型中的所有类型参数替换为其边界或对象。在您的示例中,double是基本类型。所以你得到了这个错误。
点击此链接http://docs.oracle.com/javase/tutorial/java/generics/erasure.html