一尘不染

未绑定通配符和原始类型之间的区别

java

我正在阅读有关泛型的信息,但我不了解未绑定通配符的需求以及它与原始类型的区别。我读了这个问题,但仍然不清楚。在未绑定通配符
Java教程页面中,我得到了以下两点,但我不明白第一点:

  • 如果您正在编写可以使用Object该类中提供的功能实现的方法。
    * 当代码在泛型类中使用不依赖于type参数的方法时。例如,List.size()List.clear()。实际上,Class<?>之所以经常使用它是因为其中的大多数方法Class<T>都不依赖T

有人可以用外行语言解释未绑定的通配符和原始类型之间的区别吗?

如何List<?>从不同List<Object>


阅读 201

收藏
2020-09-08

共1个答案

一尘不染

有什么List<?>不同List<Object>

主要区别在于第一行可以编译,而第二行则不能:

List<?> list = new ArrayList<String> ();
List<Object> list = new ArrayList<String> ();

但是,由于您不知道泛型List<?>是什么,因此无法使用其参数化方法:

List<?> list = new ArrayList<String> ();
list.add("aString"); //does not compile - we don't know it is a List<String>
list.clear(); //this is fine, does not depend on the generic parameter type

至于原始类型(没有泛型)的区别,下面的代码可以编译并正常运行:

List list = new ArrayList<String> ();
list.add("aString");
list.add(10);
2020-09-08