我昨天了解到你可以在类型参数上调用静态方法。例如:
public static <T extends Arrays> void main(String[] args) {
T.sort(args);
}
是否有任何理由允许这样做?它是否可能以某种方式帮助从非通用代码转换为通用代码?
答案 0 :(得分:2)
我认为这不是明确允许的,而只是说它不被禁止。
JLS 8.4.4 Generic Methods未指定任何不允许使用的类型变量。
JLS 8.1.2 Generic Classes and Type Parameters列出无法使用T
的地方:
在以下任何一项中引用泛型类C的类型参数是编译时错误:
基本上,除非另有说明,否则允许在允许类型的任何地方使用类型变量,并且它们不会列出static
方法调用。
故意或疏忽?谁知道,但可能是故意的。由于允许在实例变量上调用静态方法,为什么不允许这样做。仅仅因为它被允许,并不意味着你应该这样做。
正如JLS 4.4 Type Variables所说(强调我的):
类型变量是一个非限定标识符,用作类,接口,方法和构造函数体中的类型。