java - 我不明白方法语法

java - I don't understand method syntax

我有 class:

public abstract class Entry{
    protected static <T extends Entry> List<T> all(Class<T> cls) {
        blah blah
    }

它的child:

class Article extends Entry {
    public static List<Article> all() throws SQLException {
        return Entry.all(Article.class);
    }
}

我不明白方法的语法:

protected static <T extends Entry> List<T> all(Class<T> cls)

为什么我们不能这样做呢?:

protected static List<T> all(Class<T> cls)
protected static <T extends Entry> List<T> all(Class<T> cls)

这意味着名为 all 的方法有一个 type parameter T,它必须是 Entry(或 Entry 本身)的子类型。

Oracle 的 Java 教程中的

Generic Methods 解释了语法及其含义。

Why we just can not do like this?:

protected static List<T> all(Class<T> cls)

因为编译器不会自动知道 T 你指的是类型参数而不是具体类型。

请注意,对于类型参数,单个大写字母最常用于类型参数的名称。但这只是一个惯例。您可以使用作为有效标识符的任何名称。

如果名称应该是类型参数,则必须如此声明,否则 Java 编译器会假定它是具体类型。