我有这样的界面,
public interface EventListener<T extends Event>
这里的问题是EventListener
是一个非常通用的名称(也可以说是Event
)而类Event
不是以通用方式编写的。
由于我们不允许进行非向后兼容的更改,因此计划是将接口的通用部分修改为更一般。所以基本上我有两个选择。或者,
a)添加一个超级界面(例如GeneralEventListener
,让我们不要忘记现在的名字),这可以毫无歧视地采用通用
public interface GeneralEventListener<T>
b)允许EventListener
获取T类型的对象。
public interface EventListener<T>
我确信第一个是允许的修改。然而,这似乎是一种不必要的复杂性,它会污染命名空间。除了以前的信息之外,没有必要将限制保留在Event
。所以我想知道,&#34;是变化(b)二进制向后兼容&#34;?
答案 0 :(得分:1)
我之前的回答并不完全正确。
这会导致问题。由于您使用的是有界类型,编译器将使用有界类型替换type参数。
查看:https://docs.oracle.com/javase/tutorial/java/generics/erasure.html
当然,因为泛型是在编译时使用的,所以最好的选择就是进行更改并查看代码是否编译。