Java泛型:“核心Java”教程的解决方案不适用于Eclipse?

时间:2012-10-12 17:12:03

标签: java eclipse generics

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

2 个答案:

答案 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);