[英]Java generics question
所以我有3節課。
Abstract class A
Class B extends class A
independent Class C
在包含main方法的D類中,我創建了一個B類實例的列表
List<B> b = methodCall(); // the method returns a list of instances of class B
現在在類CI中有一個方法對A和B都是通用的,因此我不想復制它。 我想有一個方法,將A類的實例作為輸入,如下所示:
public void someMethod(List<A> a)
但是,當我這樣做時:
C c = new C();
c.someMethod(b);
我得到一個錯誤,some-method不適用於參數List<B>
,而是期望得到List<A>
。
有沒有一種解決這個問題的好方法? 非常感謝!
如果你有一個期望List<A>
的方法,並且一個B extends A
類B extends A
,並且你希望將這個方法傳遞給List<B>
,那么你應該將該方法聲明為:
public void someMethod(List<? extends A> list)
這允許傳遞給方法的列表是A的列表或任何擴展B的列表。
請注意,您將無法確定具體類型?
傳遞給方法。
此外,如果您在兩個類之間有重復的方法,那可能表明您的設計出現了問題。
public void someMethod(List<? extends A> a){ //...
在方法簽名中,您有List<A> a
,這意味着它只接受A
類對象的列表。 你需要的東西是接受A
的列表和A
any subtype of A
(或any subtype of A
一個子類型)。
你需要的是這個:
public void someMethod(List<? extends A> list) {
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.