Почему вызов непараметризованного метода с аргументами типа не является ошибкой?

У меня есть следующая Java-программа, которую я ожидал не компилировать, но она сделала:

class Test {
    public static void f() {
    }

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

почему javac позволяет вызывать непараметризованный метод таким образом?

моя версия компилятора Java: javac 1.7.0_75

1 ответов


параметр явного типа просто игнорируется.

об этом говорится в JLS, раздел 15.12.2.1:

  • если вызов метода включает явные аргументы типа, а элемент является универсальным методом, то число аргументов типа равно к числу параметров типа метода.

это предложение подразумевает, что неродовой метод может быть потенциально применимо к вызову, который предоставляет явные аргументы типа. Действительно, она может оказаться применимой. в таком случае, типа аргументы будут просто проигнорированы.