java - 修改接口(interface)中的泛型如何影响向后兼容性

标签 java backwards-compatibility

我有一个这样的界面,

public interface EventListener<T extends Event>

这里的问题是 EventListener 是一个非常通用的名称(也可以用于 Event),而类 Event 不是以通用方式编写。

由于我们不允许进行非向后兼容的更改,因此计划将接口(interface)的通用部分修改为更通用。所以基本上我有两个选择。要么,

a) 添加一个 super 接口(interface)(例如GeneralEventListener,我们现在不要介意这个名称),它可以不受歧视地采用泛型

public interface GeneralEventListener<T>

b) 允许 EventListener 获取 T 类型的对象。

public interface EventListener<T>

我确信第一个是允许的修改。然而,这似乎是不必要的复杂化,并且会污染命名空间。除了以前的信息之外,没有必要保留对 Event 的限制。所以我想知道,“更改 (b) 二进制文件是否向后兼容”?

最佳答案

我之前的回答并不完全正确。

这会导致问题。由于您使用的是有界类型,编译器会将类型参数替换为有界类型。

看看:https://docs.oracle.com/javase/tutorial/java/generics/erasure.html

当然,因为泛型是在编译时使用的,所以最好的选择就是进行更改并查看代码是否可以编译。

关于java - 修改接口(interface)中的泛型如何影响向后兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45818915/

相关文章:

java - Mapbox:可视化符号的问题

java - 全局变量未被覆盖函数更新

javascript - 新的 ECMAScript 5 函数有哪些现代化脚本?

Android:support.v4.app.Fragment -> Fragment classcastexception 的解决方法?

通过 REST : Share a jar with class definitions? 进行 Java 到 Java 的对话

java - JVM 如何保护文件访问?

java - 检测客户端何时与服务器断开连接

javascript - 根据 HTML 中的浏览器类型确定要使用的超链接

c# - DataContract 向后兼容序列化

assembly - 英特尔 TSX 前缀是否作为 NOP 在 AMD 上(安全)执行?