我有两个界面:
public interface EventListener {
<T extends Data> T modify(T data);
public static class Data {
}
}
和:
public interface ServerInfoEventListener extends EventListener {
// This works
@Override ServerInfoData modify(Data data);
// This doesn't work!
@Override ServerInfoData modify(ServerInfoData data);
public static class ServerInfoData extends Data {
public ServerInfoData(String motd, int playerCount, int maxPlayers) {
this.motd = motd;
this.playerCount = playerCount;
this.maxPlayers = maxPlayers;
}
public String motd;
public int playerCount;
public int maxPlayers;
}
}
从注释中可以看到,
modify(ServerInfoData data)
无法编译。为什么不呢,我该如何解决呢? ServerInfoData
扩展了Data
,所以它应该起作用,对吗? 最佳答案
@Override ServerInfoData modify(ServerInfoData data)
之所以不起作用,是因为它实际上不会覆盖
EventListener.modify
,因为它将不接受Data
以外的任何其他ServerInfoData
子类(及其子类)。您要么必须处理所有
Data
类型,要么使接口本身通用,而不仅仅是一种方法:public interface EventListener<T extends Data> {
T modify(T data);
}
public interface ServerInfoEventListener extends EventListener<ServerInfoData> {
@Override ServerInfoData modify(ServerInfoData data);
}