3 回答

TA貢獻(xiàn)1893條經(jīng)驗(yàn) 獲得超10個(gè)贊
考慮這個(gè)問題的另一種方法是
HashMap<String, ?> hash1;
相當(dāng)于
HashMap<String, ? extends Object> hash1;
將此知識(shí)與Java Generics and Collections的第(2.4)節(jié)中的“獲取和放置原理”相結(jié)合:
獲取和放置原則:僅從結(jié)構(gòu)中獲取值時(shí)使用擴(kuò)展通配符,僅將值放入結(jié)構(gòu)中時(shí)使用超級(jí)通配符,獲取和放置時(shí)均不使用通配符。
希望可以開始使用通配符。

TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊
協(xié)方差以上的答案涵蓋了大多數(shù)情況,但缺少一件事:
“?” 在類層次結(jié)構(gòu)中包含“對(duì)象”。您可以說String是Object的一種,而Object是?的一種。并非所有對(duì)象都匹配Object,但是所有對(duì)象都匹配?。
int test1(List<?> l) {
return l.size();
}
int test2(List<Object> l) {
return l.size();
}
List<?> l1 = Lists.newArrayList();
List<Object> l2 = Lists.newArrayList();
test1(l1); // compiles because any list will work
test1(l2); // compiles because any list will work
test2(l1); // fails because a ? might not be an Object
test2(l2); // compiled because Object matches Object
添加回答
舉報(bào)