java - 我不懂方法语法

时间:2015-03-28 22:38:28

标签: java inheritance

我有课:

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

它的孩子:

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)

1 个答案:

答案 0 :(得分:4)

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

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

Oracle的Java教程中的

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

  

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

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

因为编译器没有自动知道T,你的意思是类型参数而不是具体类型。

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

如果名称应该是类型参数,则必须将其声明为此类,否则Java编译器会将其视为具体类型。