Java未绑定的通配符generics
在Bar
类中使用通配符类型generics而不是完全跳过它们有什么好处吗?
public class Foo {} public interface Bar { public void addFoo(Foo foo); public Foo getFoo(String name); }
有许多优点。
- 它们不会产生像使用原始类型那样的编译器警告
-
它们提供更多类型安全性。 例如,考虑
Foo
为List
。 如果您使用List
而不是List>
,则可以执行以下操作:myBar.getFoo("numbers").add("some string");
即使列表只应包含
Number
s。 如果您返回了List>
,那么您将无法向其添加任何内容(null
除外),因为列表类型未知。 - 它们记录了与原始类型完全不同的东西,即
Foo
是在某种未知但特定类型上键入的 。