型引数でパラメータ化されていないメソッドを呼び出すのはなぜエラーではないのですか?

Why is it not an error to call a non-parameterized method with type arguments?


質問 written by user11171 @2015-02-18 13:18:12Z

: 6 : 1 : 76

コンパイルしないと予想していた次のJavaプログラムがありますが、実行されました。

class Test {
    public static void f() {
    }

    void m() {
            Test.<String>f();
    }
}

javacがこのようにパラメータ化されていないメソッドの呼び出しを許可するのはなぜですか?

私のJavaコンパイラのバージョン:javac 1.7.0_75

コメント 1

どのJDKバージョンを使用していますか?私にはコンパイルされません(JDK 1.5および1.6)

written by アルバート @2015-02-18 13:10:45Z

コメント 2

@Albert Oh、Java 7を使用しています。JDKバージョンで説明を編集します。

written by user11171 @2015-02-18 13:16:59Z

コメント 3

このようなものを入手した場所ⁿ|ⁿ–

written by AJ。 @2015-02-18 13:28:17Z

回答 1 written by Konstantin Yovkov @2015-02-18 13:28:45Z
5

明示的な型パラメーターは単に無視されます。

これは、 JLS、セクション15.12.2.1に記載されています

  • メソッド呼び出しに明示的な型引数が含まれ、メンバーがジェネリックメソッドである場合、型引数の数はメソッドの型パラメーターの数と等しくなります。

この節は、非ジェネリックメソッドが、明示的な型引数を提供する呼び出しに適用できる可能性があることを意味します。 確かに、それは適用可能になることがあります。 そのような場合、型引数は単に無視されます。