为什么 javac 在这种情况下不检查未声明的 TypeParameter?

Why javac not checks the undeclared TypeParameter in this case?

有一个与 Java 泛型相关的问题。请看下面的一段代码。

class Beta{
    
    public void hello(){}
}
class Alpha {
    public <Anything> void greet(Beta beta) {
        beta.hello();
    }

}

在方法greet()中,<Anything>没有在任何地方声明。为什么在这种情况下 javac 不抛出任何错误?

<Anything> 唯一出现的地方是它的声明。 它是在方法的范围内声明的,但从未使用过。

从通用方法的Java语言规范中获取以下示例:

class CollectionConverter {
<T> List<T> toList(Collection<T> c) {...}
}

第一个 <T> 声明类型参数。第二个和第三个将它用于 return 类型和参数类型。

您的示例基本上只是第一个 <T>,没有实际使用。有点奇怪,但不是问题。