gpt4 book ai didi

java - 接口(interface)中的继承

转载 作者:行者123 更新时间:2023-12-01 17:50:44 26 4
gpt4 key购买 nike

我有两个接口(interface):

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,因为它不会接受除ServerInfoData之外的任何其他Data子类(及其子类)。

您要么必须处理所有 数据类型,要么使接口(interface)本身通用,而不仅仅是一种方法:

public interface EventListener<T extends Data> {
T modify(T data);
}

public interface ServerInfoEventListener extends EventListener<ServerInfoData> {
@Override ServerInfoData modify(ServerInfoData data);
}

关于java - 接口(interface)中的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50449571/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com