我已经阅读了有关为什么你不能在泛型类中使用(编辑 - 泛型)(使用泛型类中的类型参数)静态方法的帖子,但为什么你可以使用静态泛型方法非通用类?我不明白为什么第二个被允许,但我有点理解为什么第一个不允许。
答案 0 :(得分:9)
为什么你不能在泛型类中使用(编辑 - 泛型)(使用泛型类中的那个类型参数)静态方法
原因很简单:type参数不与类相关联,但与类的实例相关联。
即,你做不到
class Test<T> {
public static void sayHello(T t) { // T for which instance?!
System.out.println("Hello");
}
}
为什么你可以在非泛型类中使用静态泛型方法?
你为什么不呢?泛型方法采用类型参数,因此无论它是静态的还是静态的,或者它所在的类是否是通用的等等都无关紧要。
这例如编译好:
class Test {
public static <T> void sayHello(T t) {
System.out.println("Hello " + t);
}
}
你可以这样称呼这个方法:
Test.<String>sayHello("some argument");
^^^^^^^^
type parameter provided at the method-call: no instance required.