Java中的高级多态性?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (28)
public final class GenericClass<T> {
    private void overloadedMethod(Collection<?> o) {
        System.out.println("Collection<?>");
    }

    private void overloadedMethod(List<Number> o) {
        System.out.println("List<Number>");
    }

    private void overloadedMethod(ArrayList<Integer> o) {
        System.out.println("ArrayList<Integer>");
    }

    public void method(List<T> l) {
        overloadedMethod(l);
    }

    public static void main(String[] args) {
        GenericClass<Integer> test = new GenericClass<Integer>();
        test.method(new ArrayList<Integer>());
    }
}

为什么这个代码会打印“Collection<?>”?

提问于
用户回答回答于

声明method(List<T> l)不指定类型T的任何界限。不能保证T是数字或数字的子类。因此,编译器只能确定此方法调用overloadedMethod(Collection<?> o)...

用户回答回答于

每当定义泛型类型时,都会自动提供相应的原始类型。

public void method(List<T> l) {

}

正在用

public void method(List<Object> l) {

}

如果阅读了通配符类型,将看到List<Number>List<Object>ArrayList<Integer>List<Object>没有任何类型的关系。

扫码关注云+社区

领取腾讯云代金券