我正在阅读 Hortsmann 和 Cornell 的《Core Java》一书(Vol.1)。在泛型一章中,他们建议了一个故意错误的输入,以便查看编译器所说的内容。我的问题是:不仅编译器不会给我同样的错误,而且当我按照书中所述更正输入时,它也会继续给我错误。这是交易:
public class PairTest1 {
public static void main(String[] args) {
double middle = ArrayAlg.getMiddle(3.14, 1729, 0);
}
}
class ArrayAlg {
public static <T> T getMiddle(T[] a) {
return a[a.length / 2];
}
}
这本书说我应该得到错误:
找到:java.lang.Number&java.lang.Comparable>,要求:double。
相反,Eclipse 不会让我运行程序,说
ArrayAlg 类型中的方法 getMiddle(T[]) 不适用于参数 (double, int, int)
然后书上说
补救方法是将所有参数写为双精度值。
因此,我将 1729 更改为 1729.1,将 0 更改为 0.1。现在 Eclipse 说:
ArrayAlg 类型中的方法 getMiddle(T[]) 不适用于参数 (double, double, double)
嗯……我不明白发生了什么。建议?
谢谢和问候
编辑:我试图创建数组double[] doubles = { 3.14, 1729.1, 0.1 };
并将其作为参数提供,但现在我得到了错误The method getMiddle(T[]) in the type ArrayAlg is not applicable for the arguments (double[])