以下是该 方法 的方法调用的:
JLS
15.12列出了以下方法调用方法:
MethodName ( [ArgumentList] )(注意:这没有类型参数) TypeName.[TypeArguments] Identifier ( [ArgumentList] ) expressionName.[TypeArguments] Identifier ( [ArgumentList] ) Primary.[TypeArguments] Identifier ( [ArgumentList] ) super.[TypeArguments] Identifier ( [ArgumentList] ) TypeName.super.[TypeArguments] Identifier ( [ArgumentList] )
因此,在Java语言规范中,具有表达式或类型名称的方法可以具有类型实参,但请注意,在第一个方法调用中,您不能指定类型实参,因为它是非法的。
请注意,这不仅
this不允许这样做,而且
static调用和
super方法调用也可以具有类型参数,并且这些参数是完全合法的。
static void m() { }void test() { ClassName.<Integer>m();//Also compiles}除此之外,您还会收到以下警告,
非泛型方法m()的未使用类型参数 …
代表以下JLS
15.12.2.1的声明,
此子句暗示非通用方法可能
potentially适用于提供显式类型参数的调用。确实,这可能是适用的。在这种情况下,类型参数将被简单地 _忽略_ 。
它说 确实,它 可能 是适用的(在运行时)
此外,
该规则源于 兼容性和可替代性原则。 由于接口或超类的生成可以独立于其子类型,因此 我们可以用非泛型方法覆盖泛型方法。
但是,重写(非泛型)方法必须适用于对泛型方法的调用,包括显式传递类型实参的调用。否则,该亚型将无法替代其生成的超型。



