如果我在MyClass
中有一個方法,如Java Generics:使用List of subclass設置超類列表
setSuperClassList(List<Superclass>)
...我應該能夠這樣做:
new MyClass().setSuperClassList(new ArrayList<Subclass>())
看來這不會編譯。爲什麼?
如果我在MyClass
中有一個方法,如Java Generics:使用List of subclass設置超類列表
setSuperClassList(List<Superclass>)
...我應該能夠這樣做:
new MyClass().setSuperClassList(new ArrayList<Subclass>())
看來這不會編譯。爲什麼?
嘗試setSuperClassList(List<? extends Superclass>)
。
另請檢查PECS以查看是否應該使用? extends
或? super
。
它不會編譯,因爲java.util.List
不是covariant。
嘗試setSuperClassList(List<? extends Superclass>)
來代替。
你只是在做泛型有點不對。添加? extends
位,這將允許傳入的列表包含SuperClass或其任何子類。
setSuperClassList(List<? extends Superclass>)
這被稱爲設置泛型的上界。
聲明List<Superclass>
表示該列表只能包含SuperClass
。這不包括任何子類。
做:
setSuperClassList(List<? extends Superclass> list)
這將使超類的任何子類的列表。
+1提及佩奇。 :-) –
同意 - 感謝您的鏈接 –