簡體   English   中英

一組列表與通配符通用作為方法中的參數

[英]Set of Lists with wildcarded generic as a parameter in method

我需要將一些對象(具有不同類型)的一組列表傳遞給一個函數,但它不起作用。 有人可以解決問題嗎?
代碼示例:

public class Main {
    public static void main(String[] args) {
        Set<String> set = Set.of("1");
        print(set); //ok

        Set<List<String>> setOfList = Set.of(List.of("1"));
        print2(setOfList); //doesn't work
    }

    static void print(Set<? extends CharSequence> set) {
        System.out.println(set);
    }

    private static void print2(Set<List<? extends CharSequence>> setOfList) {
        System.out.println(setOfList);
    }
}

也為set元素添加上限:

Set<? extends List<? extends CharSequence>>

原因是你可以添加任何List<? extends CharSequence> List<? extends CharSequence>Set<List<? extends CharSequence>> Set<List<? extends CharSequence>> 例如,您可以添加List<StringBuilder>

private static void print2(Set<List<? extends CharSequence>> setOfList) {
    setOfList.add(List.of(new StringBuilder());
}

如果你被允許從main調用該方法,那么如果你做了類似這樣的事情,你會得到一個ClassCastException

Set<List<String>> setOfList = Set.of(List.of("1"));
print2(setOfList); // pretend it works...

for (List<String> list : setOfList) {
  String s = list.get(0);  // ClassCastException, it's a CharBuffer.
}

通過Set<? extends List<? extends CharSequence>> Set<? extends List<? extends CharSequence>> Set<? extends List<? extends CharSequence>> ,你不能向Set添加任何東西(除了文字null )。

暫無
暫無

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

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