簡體   English   中英

在方法調用之外構造的泛型對象列表時的類型不兼容

[英]Incompatible types when List of generic objects constructed outside of method call

以下代碼將無法編譯

import java.util.List;

class Scratch {

  public static void main(String[] args) {
    Foo<Object> foo = new Foo<>();
    Bar bar = new Bar();

    bar.bar(List.of(foo));  // Okay

    List<Foo<Object>> foos = List.of(foo);
    bar.bar(foos);  // Error
  }

  static class Foo<T> {}

  static class Bar {
    void bar(List<Foo<?>> foos) {}
  }
}

bar.bar(foos); 遇到此錯誤:

不兼容的類型: java.util.List<Scratch.Foo<java.lang.Object>> 無法轉換為 java.util.List<Scratch.Foo<?>>

為什么在bar()方法調用之外構造List<Foo<?>>時類型不兼容?

您應該修復<?> ,因為Foo<?>Foo<Object>不一樣。

void bar(List<Foo<Object>> foos) {}

除了通配符之外,您還可以在方法簽名中使用泛型類型,它仍然允許任何 Object 類型,即以下:

<T> void bar(List<Foo<T>> foos)

代替

void bar(List<Foo<?>> foos)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM