続・思いつき

extendsを指定してあるのでstaticメソッドの存在は確定しているはずだが、それでもGeneric型からstaticメソッドを呼ぶことは出来なかった。*1Genericsが扱うのはTypeであって、Classではないということなのだろう。

public class Test {
    static public < T extends Test> void call() {
        Test.print();
        Test2.print();
        //T.print();//駄目
    }
    static public  void  print() {
        System.out.println("Test");
    }
    static public void main(String[] args) {
        Test.call();
    }
    static class Test2 {
        static public void print() {
            System.out.println("Test2");
        }
    }
}

*1:常に親Classのstaticメソッドを呼ぶという実装でも構わないはずだが、混乱を避けるために制限しているのかな。