簡體   English   中英

Java泛型問題

[英]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 AB 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.

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