我有一个这样的界面,
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/