2015-01-08 42 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的子类