我有一个现有的Java API方法:
public foo(Collection<Object> collection) {... }
从集合param读取项目,但永远不会更新。我想将方法更改为:
public foo(Collection<?> collection) {... }
这种变化是否保证透明,安全,对用户没有副作用?
注意:不确定它是否重要,但API也包含此方法:
public foo(Object object) { ... }
答案 0 :(得分:3)
将参数设置为Collection<?>
允许用户将他们想要的任何Collection
传递给该方法,因为Collection<?>
实际上是所有类型的超类型收藏品。
与此同时,Collection<Object>
仅与Collection<Object>
值兼容,但与Collection<String>
,Collection<Integer>
等不兼容,这使得两种方法之间存在差异
总而言之,通过应用此更改,您实际上会破坏方法的初始意图,即仅使用Object
的集合。
foo(Object object)
方法只是foo(Collection<Object> object)
方法的方法重载,仅此而已。
答案 1 :(得分:0)
它具有“副作用”,即无法在Collection<String>
上调用原始方法,而第二种方法允许使用Collection<String>
作为调用参数。