我有一个现有的Java API方法:
public foo(Collection<Object> collection) {... }
从集合参数中读取项目,但从未更新。 我想将方法更改为:
public foo(Collection<?> collection) {... }
这项更改是否能够保证对用户透明、安全并且没有任何副作用?
注:不确定这是否重要,但API还包含此方法:
public foo(Object object) { ... }
Collection<?>
,允许用户将任何他们想要的Collection
传递给方法,因为Collection<?>
实际上是所有类型集合的超级类型。Collection<Object>
仅与Collection<Object>
值兼容,而不与Collection<String>
、Collection<Integer>
等兼容,这是两种方法之间的区别。Object
集合。
foo(Object object)
方法只是foo(Collection<Object> object)
方法的重载,没有其他作用。它具有“副作用”,即原始方法无法在Collection<String>
上调用,而第二种方法将允许使用Collection<String>
作为调用参数。