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 编译器会假定它是具体类型。
我有 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
本身)的子类型。
Generic Methods 解释了语法及其含义。
Why we just can not do like this?:
protected static List<T> all(Class<T> cls)
因为编译器不会自动知道 T
你指的是类型参数而不是具体类型。
请注意,对于类型参数,单个大写字母最常用于类型参数的名称。但这只是一个惯例。您可以使用作为有效标识符的任何名称。
如果名称应该是类型参数,则必须如此声明,否则 Java 编译器会假定它是具体类型。