【发布时间】:2014-03-23 18:35:54
【问题描述】:
我有代码:
Set<? extends Notifiable> notifiables;
Notifiable 是一个接口。我不明白上面的代码和:
Set<Notifiable> notifiables;
如果 Notifiable 是一个类,那么我会理解其中的区别,第一个代码将允许 Notifiable 和 Notifiable 的任何子类,而第二个代码只允许 Notifiable(而不是任何子类)
由于您不能拥有接口的实例,我可以向集合添加/等什么? 在我看来,只有两种选择,一种是实现 Notifiable 的任何东西(在这种情况下,它与第一个代码有何不同),或者只有“Notifiable 的实例”不存在,因此什么都没有(这是毫无意义的,应该抛出编译时错误)。
【问题讨论】:
-
+1 好问题,我试图让它工作,但我自己也无法做到。
-
您似乎误解了通配符的含义。通配符与可以将哪种
Notifiable添加到集合中无关,而是可以将哪种Set放入引用变量中。实际上,您无法向Set<? extends Notifiable>添加任何内容。 -
@radiodef,我的意思是使用通配符声明的变量和没有声明的变量之间的区别?