Java未绑定通配符泛型

Java未绑定通配符泛型,java,generics,nested,bounded-wildcard,Java,Generics,Nested,Bounded Wildcard,在Bar类中使用通配符类型泛型比完全跳过它们有什么好处吗 public class Foo<T> {} public interface Bar { public void addFoo(Foo<?> foo); public Foo<?> getFoo(String name); } 公共类Foo{} 公共接口栏{ 公共无效添加Foo(Foo-Foo); 公共Foo getFoo(字符串名称); } 有多种优势 它们不会像使用原始类型那

Bar
类中使用通配符类型泛型比完全跳过它们有什么好处吗

public class Foo<T> {}

public interface Bar {
    public void addFoo(Foo<?> foo);
    public Foo<?> getFoo(String name);
}
公共类Foo{}
公共接口栏{
公共无效添加Foo(Foo-Foo);
公共Foo getFoo(字符串名称);
}

有多种优势

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

    myBar.getFoo("numbers").add("some string");
    
    即使该列表只应包含
    Number
    s。如果您返回了一个
    列表
    ,那么您将无法向其中添加任何内容(除了
    null
    ),因为列表的类型未知

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

您可能想看看