Почему вызов непараметризованного метода с аргументами типа не является ошибкой?
У меня есть следующая 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:
- если вызов метода включает явные аргументы типа, а элемент является универсальным методом, то число аргументов типа равно к числу параметров типа метода.
это предложение подразумевает, что неродовой метод может быть потенциально применимо к вызову, который предоставляет явные аргументы типа. Действительно, она может оказаться применимой. в таком случае, типа аргументы будут просто проигнорированы.