Java未绑定的通配符generics

Bar类中使用通配符类型generics而不是完全跳过它们有什么好处吗?

 public class Foo {} public interface Bar { public void addFoo(Foo foo); public Foo getFoo(String name); } 

有许多优点。

  • 它们不会产生像使用原始类型那样的编译器警告
  • 它们提供更多类型安全性。 例如,考虑FooList 。 如果您使用List而不是List ,则可以执行以下操作:

     myBar.getFoo("numbers").add("some string"); 

    即使列表只包含Number s。 如果您返回了List ,那么您将无法向其添加任何内容( null除外),因为列表类型未知。

  • 它们记录了与原始类型完全不同的东西,即Foo是在某种未知但特定类型上键入的