2015-01-08 41 views
-1

我在我的java書上尋找解釋,但我沒有找到它。我正在網上尋找一篇文章,但我沒有找到任何明確的。Collection <?是什麼?擴展myObject>的意思?

是否Collection <? extends myObject>意味着我可以把集合兩者myObject的和擴展myObject的對象?它意味着什麼嗎?

+1

http://stackoverflow.com/questions/252055/java-generics-wildcards – assylias

+1

當您嘗試將不同種類的東西放入集合中時發生了什麼?我的意思是,你這樣做,對吧? –

+0

http://stackoverflow.com/questions/4343202/difference-between-super-t-and-extends-t-in-java –

回答

2

它意味着任何對象都可以替換?a-kind-of關係或子類myObject的,這裏myObject的可classinterface

例如:

class Doctor{} 

class GeneralDoctor extends Doctor{} 

class Dentist extends Doctor{} 

然後,Collection<? extends Doctor> doctors;將僅接受的兒童醫生(即GeneralDoctorDentist

1

Collection <? extends myObject>是否意味着我可以在Collection中同時添加myObject和擴展myObject的對象?

不是真的 - 這意味着該集合是某種特定類型的集合,它可以擴展爲myObject。舉一個更清晰的例子,如果你有一個Collection<? extends Number>它可能是Collection<Integer>或者Collection<Double>或者Collection<Number>但你不知道哪個。

因此,您不能爲該集合添加任何內容,因爲您不知道其泛型類型是什麼。但是,如果您從該集合中獲得元素,則可以確定它是Number

List<? extends Number> c = getList(); 
Number n = c.get(0); //ok 
c.add(1); //not ok, c could well be a List<BigDecimal>, we don't know 
+0

感謝您的明確解釋。如果你有時間,我還有一個問題。如果我不能執行c.add(1),這意味着我無法以編程方式創建一個Collection並填充它。 這是否意味着我可以使用<?擴展Number>就像方法的參數一樣? – MDP

+1

您可以在不需要知道集合確切類型的地方使用它。但通常你會在方法返回該類型時使用它(例如,基於我的示例:'public Collection <?extends Number> getList(){...}')。 – assylias

1

它被稱爲通用方法。這個整體概念在Java中被稱爲「泛型」。該聲明意味着T可以是任何類型,它是myObject的子類