0

本「Java Generic and Collections」のセクション1.4から、このコードスニペットがあります

class Lists {
    public static <T> List<T> toList(T... arr) {
        List<T> list = new ArrayList<T>();
        for (T elt : arr)
            list.add(elt);
        return list;
    }
}

次に、次のステートメントがあります。

型パラメーターがジェネリック メソッドの呼び出しに渡されると、メソッド宣言と同様に、左側の山かっこ内に表示されます。Java 文法では、型パラメーターは、ドット形式を使用するメソッド呼び出しでのみ使用できる必要があります。メソッド toList がコードを呼び出す同じクラスで定義されている場合でも、次のように短縮することはできません。

List<Integer> ints = <Integer>toList(); // compile-time error

これはパーサーを混乱させるため、違法です。

そのため、コンパイラ時のエラーが発生する理由を理解しようとしています。

4

1 に答える 1

0

そのため、コンパイラ時のエラーが発生する理由を理解しようとしています。

それは仕様だからです。JLS §15.12を参照してください。

メソッド呼び出し式は、クラスまたはインスタンス メソッドを呼び出すために使用されます。

MethodInvocation :
       MethodName ( ArgumentList opt )
      プライマリNonWildTypeArguments opt 識別子( ArgumentList opt )
      素晴らしい 。NonWildTypeArguments opt 識別子( ArgumentList opt )
       ClassName . 素晴らしい 。NonWildTypeArguments opt 識別子( ArgumentList opt )
       TypeName . NonWildTypeArguments 識別子( ArgumentList opt )

なぜ仕様がそのように書かれたのかについては、言語設計者だけが答えることができます。

于 2012-08-23T02:23:11.380 に答える