有很多优点。
- 他们不会像使用原始类型那样产生编译器警告
- 它们提供了更多的类型安全性。例如,考虑是否
Foo
是List
。如果您使用List
代替List<?>
,则可以执行以下操作:myBar.getFoo("numbers").add("some string");
即使该列表仅 应 包含
Numbers。如果返回
List<?>,则您将无法添加 任何 内容(除外
null),因为列表类型未知。
- 他们记录的东西与原始类型完全不同,即
Foo
使用某种 未知但特定的类型进行输入 。

有很多优点。
Foo是
List。如果您使用
List代替
List<?>,则可以执行以下操作:
myBar.getFoo("numbers").add("some string");即使该列表仅 应 包含
Numbers。如果返回
List<?>,则您将无法添加 任何 内容(除外
null),因为列表类型未知。
Foo使用某种 未知但特定的类型进行输入 。