为什么使用类型参数调用非参数化方法不会出错?

6
我有以下Java程序,本来预计无法编译,但实际上却可以:
class Test {
    public static void f() {
    }

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

为什么 javac 允许以这种方式调用不带参数的方法?
我的 Java 编译器版本是:javac 1.7.0_75

2
你使用的是哪个JDK版本?它对我来说无法编译(JDK 1.5和1.6)。 - Albert
@Albert Oh,我正在使用Java 7。我将编辑描述以包含我的JDK版本。 - user11171
你从哪里得到这些东西的 ⁿ|ⁿ - AJ.
1个回答

5
显式类型参数将被简单地忽略。如JLS, Section 15.12.2.1中所述:
如果方法调用包含显式类型参数,并且成员是一个泛型方法,则类型参数的数量等于方法的类型参数数量。
这个条款意味着非泛型方法可能适用于提供显式类型参数的调用。事实上,它可能适用。在这种情况下,类型参数将被简单地忽略。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接