我正在阅读Hortsmann和Cornell(Vol.1)的“核心Java”一书。 在泛型章节中,他们提出了一个故意错误的输入,以便了解编译器所说的内容。我的问题是:不仅编译器不会给我同样的错误,而且当我按照书中所述更正输入时,它也会继续给我错误。这是交易:
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&amp; java.lang.Comparable&gt ;, required:double。
相反,Eclipse不会让我运行程序,说
ArrayAlg类型中的方法getMiddle(T [])不适用 参数(double,int,int)
然后这本书说
因此,我将1729更改为1729.1,将0更改为0.1。现在Eclipse说:补救措施是将所有参数都写为双值。
嗯......我没有得到正在发生的事情。建议?ArrayAlg类型中的方法getMiddle(T [])不适用 参数(double,double,double)
谢谢你&amp;问候
编辑:我尝试创建数组double[] doubles = { 3.14, 1729.1, 0.1 };
并将其作为参数提供,但现在我收到错误The method getMiddle(T[]) in the type ArrayAlg is not applicable for the arguments (double[])
答案 0 :(得分:4)
该函数需要一个数组,但您要传递3个单独的双参数。
答案 1 :(得分:4)
您应该将通话更改为
double middle = ArrayAlg.getMiddle(new Double[]{ 3.14, 1729.0, 0.0 });
如果您想按照自己的方式传递它们,那么您应该将声明更改为
public static <T> T getMiddle(T... a)
{
return a[a.length / 2];
}
使用Java的var-arg语法。然后你可以调用方法
double middle = ArrayAlg.getMiddle(3.14, 1729.0, 0.0);