我正在阅读有关泛型的信息,但我不了解未绑定通配符的需求以及它与原始类型的区别。我读了这个问题,但仍然不清楚。在未绑定通配符的 Java教程页面中,我得到了以下两点,但我不明白第一点:
如果您正在编写可以使用Object该类中提供的功能实现的方法。 * 当代码在泛型类中使用不依赖于type参数的方法时。例如,List.size()或List.clear()。实际上,Class<?>之所以经常使用它是因为其中的大多数方法Class<T>都不依赖T。
Object
List.size()
List.clear()
Class<?>
Class<T>
T
有人可以用外行语言解释未绑定的通配符和原始类型之间的区别吗?
如何List<?>从不同List<Object>?
List<?>
List<Object>
有什么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);