Java未绑定的通配符泛型

Joh*_*erg 4 java generics nested bounded-wildcard

Bar课堂上使用通配符类型的泛型完全跳过它们有什么好处吗?

public class Foo<T> {}

public interface Bar {
    public void addFoo(Foo<?> foo);
    public Foo<?> getFoo(String name);
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 6

有许多优点.

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

    myBar.getFoo("numbers").add("some string");
    
    Run Code Online (Sandbox Code Playgroud)

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

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