0

我正在阅读 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[])

4

2 回答 2

4

The function expects an array, but you are passing 3 individual double parameters instead.

于 2012-10-12T17:15:07.070 回答
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);
于 2012-10-12T17:16:18.443 回答