如何在界面中修改泛型会影响向后兼容性

时间:2017-08-22 13:24:28

标签: java backwards-compatibility

我有这样的界面,

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;?

1 个答案:

答案 0 :(得分:1)

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

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

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

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