使用泛型的静态方法覆盖(?)会产生冲突错误

时间:2017-11-01 23:10:30

标签: java generics static-methods

下式给出:

static class ClassA {
    static <V> ClassA create( List<V> things ) {
        //do something with things
        return new ClassA();
    }
}

static class ClassB extends ClassA {
    //note: using <V> is fine, but <V extends Number> gives an error
    static <V extends Number> ClassB create(List<V> numbers) {
        //do something with numbers
        return new ClassB();
    }
}

我收到错误:

  

&#39;创建(列表)&#39;在&#39; ClassB&#39;与&#39;创建(列表)&#39;发生冲突在&#39; ClassA&#39 ;;两种方法都有相同的擦除,但都没有隐藏其他方法

解决这个问题的简单方法是不同地命名方法,但我想更好地理解为什么这是一个问题(如果有解决方法)。

根据我对静态方法的理解,根据对象的静态类型选择要调用的方法。因此ClassA foo = new ClassB(); foo.create(null);会调用ClassA.create(null)。当然,直接使用类名时选择正确的方法不应该是一个问题:ClassB.createClassA.create

我的猜测是ClassB.create(new ArrayList<String>())会出现问题。虽然在编译时,仍然可以确定ClassA.create可以(应该(?))被调用。

0 个答案:

没有答案