4

在类中使用通配符类型的泛型Bar比完全跳过它们有什么优势吗?

public class Foo<T> {}

public interface Bar {
    public void addFoo(Foo<?> foo);
    public Foo<?> getFoo(String name);
}
4

1 回答 1

6

有多个优点。

  • 他们不会像使用原始类型那样产生编译器警告
  • 它们提供了更多的类型安全性。例如,考虑 if FoowasList相反。如果您使用List而不是List<?>,您可以这样做:

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

    即使列表应该只包含Numbers。如果您返回 a List<?>,那么您将无法向其中添加任何内容(除了null),因为列表的类型未知。

  • 它们记录了与原始类型完全不同的东西,即Foo在某些未知但特定的类型上键入
于 2012-02-06T18:24:59.337 回答