0

Hortsmann and Cornell(Vol.1)の本「CoreJava」を読んでいます。Genericsの章では、コンパイラが何を言っているかを確認するために、意図的に間違った入力を提案しています。私の問題は、コンパイラが同じエラーを出さないだけでなく、本に記載されているように入力を修正してもエラーが出続けるということです。取引は次のとおりです。

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)には適用できません。

その本はそれから言います

解決策は、すべてのパラメーターをdouble値として書き込むことです。

したがって、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

この関数は配列を想定していますが、代わりに3つの個別のdoubleパラメーターを渡しています。

于 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 に答える