【发布时间】:2018-06-02 14:51:19
【问题描述】:
我是某个开源库的作者。其中一个公共接口具有使用 Collection 等原始类型的方法,例如:
public StringBuilder append(..., Collection value);
我收到Collection is a raw type. References to generic type Collection<E> should be parameterized 警告。
我正在考虑修复这些警告。实现实际上并不关心集合中元素的类型。所以我在考虑替换Collection<?>。
但是,这些方法是我的库的公共接口的一部分。客户端代码可以调用这些方法或提供这些公共接口的自己的实现,从而实现这些方法。恐怕将Collection 更改为Collection<?> 会破坏客户端代码。所以这是我的问题。
如果我在公共界面中更改Collection -> Collection<?>,可能会导致:
- 客户端代码中出现编译错误?
- 已编译的现有客户端代码中出现运行时错误?
【问题讨论】:
-
@Nikolas 我不认为这是重复的。
-
在 JDK1.5 中也添加了泛型,大约 14 年前。微软不支持存在漏洞和安全漏洞的 12 年历史的操作系统,同样你不应该支持存在同样问题的 14 年历史的编程语言。
-
@vandench 这与支持 14 年的编程语言无关。这是关于估计从
Collection切换到Collection<?>的重大变化有多大。仿制药的时代在很大程度上是无关紧要的。之前没有更新公共 API 是我的错。坦率地说,它从来都不是优先事项。