0
我想了解Java泛型,我對有界通配符感到困惑。我正在使用Guidelines for Wildcard Use的層次結構,並添加了從EvenNumber繼承的PositiveEvenNumber類。列表中列出的Java通用通配符
List<? super EvenNumber> xn = new ArrayList<NaturalNumber>();
xn.add(new NaturalNumber(35)); // compile-time error
xn.add(new EvenNumber(-70));
xn.add(new PositiveEvenNumber(70));
xn.add(new Object()); // compile-time error
爲什麼第一行會被編譯?在第二行,不是NaturalNumber是EvenNumber的父親,爲什麼不能添加它?
謝謝!
感謝您的回答,但自然數是EvenNumber的超類型。爲什麼它不會停在那裏(再加上它是用ArrayList實例化的)? –
Anisotrop
2014-11-06 14:50:55
@Fram:因爲它也可以是'List'本身,而'NaturalNumber'不是。而且,將它分配給的表達式對變量的(編譯時)類型沒有影響。如果你想要一個'List ',你應該聲明一個'List '。 –
SLaks
2014-11-06 14:53:12