gpt4 book ai didi

java - 将文件移动到另一个类并且无法使覆盖的方法正常工作

转载 作者:行者123 更新时间:2023-12-04 04:41:38 36 4
gpt4 key购买 nike

我不得不在一个项目中重构几个类,并且有一个关于如何解决覆盖问题的问题。

我有一门课叫 AccSysChannel继承自另一个名为 SwitchChannel 的类并有一个名为 blockUntilGetMessageLength() 的方法用 @Override 表示(下面的代码)。
SwitchChannel曾经有一个方法叫做 blockUntilGetMessageLength()并且我不得不搬到一个名为 ActiveSocket 的新类(class)。 .

我现在的问题是我不知道如何 @Override blockUntilGetMessageLength()AccSysChannel使用现在在 ActiveSocket 中的方法. AccSysChannel仍然必须保持其从 SwitchChanne 的继承。 l 因为`AccSysChannel 类中包含许多其他方法。

我的问题是如何修复 @Override问题?希望这是有道理的。任何帮助/方向将不胜感激。谢谢你。

这是我的blockUntilGetMessageLength()AccSysChannel :

....

@Override
protected int blockUntilGetMessageLength() {
byte[] b = new byte[2];
byte[] other = new byte[14];
int size = -1;
String otherStr;

try {
Iterator<ActiveSocket> it = activeSockets.iterator();
while (it.hasNext()) {
ActiveSocket activeSocket = it.next();
DataInputStream dataInputStream = activeSocket.getDataInputStream();
if (dataInputStream.markSupported()) {
while (size == -1) {
dataInputStream.mark(14);
dataInputStream.readFully(other, 0, 14);
dataInputStream.reset();
otherStr = new String(other);
LOGGER.trace("Checking slice of the message: " + otherStr);
size = otherStr.indexOf("<AT");
if (size == -1){
size = otherStr.indexOf("<DSCREDIT");
}
LOGGER.trace("Found tag at index: " + size);
switch (size) {
case 0:
case 1:
// intentional fallthrough
case -1:
if (size == 0 || size == 1) {
size = -1;
}
dataInputStream.readFully(other, 0, 10);
break;
default:
// consume the bytes preceding the size bytes
dataInputStream.readFully(other, 0, size - 2);
// read the size bytes
dataInputStream.readFully(b, 0, 2);
size = (((((int) b[0]) & BYTEMASK) << BYTESHIFT) | (((int) b[1]) & BYTEMASK));
LOGGER.trace("Setting size to: " + size);
}
}
}
}
} catch (IOException ex) {
if (this.shouldTerminate) {
return 0;
} else {
Iterator<ActiveSocket> it = activeSockets.iterator();
while (it.hasNext()) {
ActiveSocket activeSocket = it.next();
Socket socket = activeSocket.getSocket();
LOGGER.warn(FormatData.formatStack(ex));
synchronized (socket) {
socket.notify();
}
}
return 0;
}
}
return size;
}

最佳答案

众所周知,在 Java 中,我们不能扩展 2 个类。所以在这里我们将不得不使用组合。
AccSysChannel正在延长 SwitchChannel ,有 ActiveSocket 的实例作为 AccSysChannel 的属性.

使用此实例,您可以调用 blockUntilGetMessageLength ActiveSocket的方法来自 blockUntilGetMessageLength AccSysChannel的方法.

您必须删除 @Override注解

关于java - 将文件移动到另一个类并且无法使覆盖的方法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18786321/

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