(Java)静态泛型方法与泛型类静态方法

时间:2012-03-18 21:26:46

标签: java generics

我已经阅读了有关为什么你不能在泛型类中使用(编辑 - 泛型)(使用泛型类中的类型参数)静态方法的帖子,但为什么你可以使用静态泛型方法非通用类?我不明白为什么第二个被允许,但我有点理解为什么第一个不允许。

1 个答案:

答案 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.