簡體   English   中英

實現擴展接口J的接口I的B類是否也擴展類型I?

[英]Does class B that implements interface I that extends interface J also extends type I?

代碼讓我感到困惑:

 Collection<? extends Map<String, String>> a = 
                       new ArrayList<SortedMap<String, String>>();
 SortedMap<String, String> b = new TreeMap<String, String>();
 b.put("1","a");

錯誤:

 a.add(b);

類型Collection>中的方法add(capture#2-of擴展Map)不適用於參數(SortedMap)為什么? SortedMap擴展了Map,而TreeMap是實現SortedMap的類。

這意味着

 Collection<? extends Map<String, String>> a ;

的元件a是延伸一個地圖不明類別。 您的意思是,當您從中獲得一個值時,它就是一個Map,但是您不能說哪一個地圖可以有效地添加到集合中。

例如, a不知道擴展Map的類,因此它不允許任何子類,因為它不知道哪個有效。

List<HashMap<String, String>> listOfMap = new ArrayList<>();
Collection<? extends Map<String, String>> a = listOfMap;
SortedMap<String, String> b = new TreeMap<String, String>();
b.put("1", "a");
a.add(b); // produces an error  as it should.

如果將a更改為

Collection<SortedMap<String, String>> a = new ArrayList<SortedMap<String, String>>();

可以添加b因為它是這種類型。

暫無
暫無

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

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