我有课:
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)
答案 0 :(得分:4)
protected static <T extends Entry> List<T> all(Class<T> cls)
这意味着名为all
的方法有type parameter T
,其必须是Entry
(或Entry
本身)的子类型。
Generic Methods解释了语法及其含义。
为什么我们不能这样做?:
protected static List<T> all(Class<T> cls)
因为编译器没有自动知道T
,你的意思是类型参数而不是具体类型。
请注意,对于类型参数,单个大写字母最常用于type参数的名称。但这只是一个惯例。您可以使用任何有效标识符的名称。
如果名称应该是类型参数,则必须将其声明为此类,否则Java编译器会将其视为具体类型。