我有这样的界面,
public interface EventListener<T extends Event>
这里的问题是
EventListener
是一个非常通用的名称(也可以用Event
来称呼),而类Event
却不是以通用的方式编写的。由于不允许我们进行非向后兼容更改,因此计划将接口的通用部分修改为更通用。所以基本上我有两个选择。要么
a)添加一个超级接口(例如,
GeneralEventListener
,现在不介意现在使用的名称)public interface GeneralEventListener<T>
b)允许
EventListener
接受类型为T的对象。public interface EventListener<T>
我确信第一个是允许的修改。但是,这似乎是不必要的复杂化,并且会污染名称空间。除了以前提供的信息外,没有必要保留对
Event
的限制。所以我想知道“更改(b)二进制向后兼容”吗? 最佳答案
我以前的回答并不完全正确。
这将导致问题。由于您使用的是有限类型,因此编译器会将type参数替换为有限类型。
看看:https://docs.oracle.com/javase/tutorial/java/generics/erasure.html
当然,因为泛型是在编译时使用的,所以最好的选择就是简单地进行更改并查看代码是否可以编译。