无法对泛型子类(Java)进行静态引用

Jef*_*son 5 java generics inheritance static extends

我有以下代码:

class SuperClass {
    public static String getName() { return "super"; }
}

class SubClass extends SuperClass {
    public static String getName() { return "sub"; }
}

public class Dummy<T extends SuperClass> {
    public void print() {
        System.out.println("SuperClass: " + SuperClass.getName());
        System.out.println("SubClass: " + SubClass.getName());
        System.out.println("T: " + T.getName());
    }
    public static void main(String[] args) {
        new Dummy<SubClass>().print();
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码输出以下内容:

SuperClass: super
SubClass: sub
T: super
Run Code Online (Sandbox Code Playgroud)

我的问题是:为什么T.getName()不返回SubClass.getName()的值?毕竟,我指定了T == SubClass.或者静态函数调用对于泛型引用是否无效?

非常感谢提前!

Sim*_*son 13

这不仅仅是关于泛型的问题.

如果你说:

SuperClass obj = new SubClass();
System.out.println(obj.getName());
Run Code Online (Sandbox Code Playgroud)

你也会得到"超级".没有"多态"静态方法.

在您的情况下,所有编译器都知道T它是否扩展SuperClass,因此它将调用SuperClass.getName().