Java instanceof 一些软编码的东西?
Java instanceof something softcoded?
我有一个名为 PacketType
的枚举。然后我有一个名为 Packet
的 class 和扩展 Packet
.
的 class DummyPacket
public class Packet {
}
public class DummyPacket extends Packet {
public void handle() {
}
}
我想要某种处理程序,这样当我得到一些对象数据包时,我想从 -DummyPacket 调用 handle()
方法。有什么方法可以做这个软编码还是我必须做
Packet instanceof DummyPacket
对于扩展数据包的每个 class?
我尝试使用 Class<?>.isInstance()
,但这对我没有帮助,因为我无法获得 Class<?>
来调用方法:
我有点想这样称呼它:
public static void handle(数据包数据包){
如果(packet.getType()。clazz.isInstance(数据包)){
packet.getType().clazz.handle();
}
}
你应该可以这样做:
public void callHandle(Packet packet) {
if (packet instanceof DummyPacket) {
((DummyPacket) packet).handle();
}
}
[编辑] 在 OP 提供了更多信息后,事实证明他正在寻找一种方法让多个 classes 具有具有相同签名的方法。
您正在寻找的是接口。看看这些 classes:
public class Packet { }
public interface Handleable {
public void handle();
}
public class DummyPacket extends Packet implements Handleable {
@Override
public void handle() {
// Do something
}
}
public class OtherPacket extends Packet implements Handleable {
@Override
public void handle() {
// Do something else
}
}
public class LastPacket extends Packet { }
在这个例子中,你有 3 个 class 是 extend
Packet
class:
DummyPacket
OtherPacket
LastPacket
但只有 2 个 class 实现了 Handleable
接口:
DummyPacket
OtherPacket
这意味着您可以检查 class 是否具有 handle
方法,如下所示:
public void callHandle(Handeable someClass) {
someClass.handle();
}
现在,我们可以过滤掉所有没有handle
方法的classes。
我建议您阅读更多有关 inheritance, abstract classes and interfaces 的内容。
我有一个名为 PacketType
的枚举。然后我有一个名为 Packet
的 class 和扩展 Packet
.
DummyPacket
public class Packet {
}
public class DummyPacket extends Packet {
public void handle() {
}
}
我想要某种处理程序,这样当我得到一些对象数据包时,我想从 -DummyPacket 调用 handle()
方法。有什么方法可以做这个软编码还是我必须做
Packet instanceof DummyPacket
对于扩展数据包的每个 class?
我尝试使用 Class<?>.isInstance()
,但这对我没有帮助,因为我无法获得 Class<?>
来调用方法:
我有点想这样称呼它:
public static void handle(数据包数据包){ 如果(packet.getType()。clazz.isInstance(数据包)){ packet.getType().clazz.handle(); } }
你应该可以这样做:
public void callHandle(Packet packet) {
if (packet instanceof DummyPacket) {
((DummyPacket) packet).handle();
}
}
[编辑] 在 OP 提供了更多信息后,事实证明他正在寻找一种方法让多个 classes 具有具有相同签名的方法。
您正在寻找的是接口。看看这些 classes:
public class Packet { }
public interface Handleable {
public void handle();
}
public class DummyPacket extends Packet implements Handleable {
@Override
public void handle() {
// Do something
}
}
public class OtherPacket extends Packet implements Handleable {
@Override
public void handle() {
// Do something else
}
}
public class LastPacket extends Packet { }
在这个例子中,你有 3 个 class 是 extend
Packet
class:
DummyPacket
OtherPacket
LastPacket
但只有 2 个 class 实现了 Handleable
接口:
DummyPacket
OtherPacket
这意味着您可以检查 class 是否具有 handle
方法,如下所示:
public void callHandle(Handeable someClass) {
someClass.handle();
}
现在,我们可以过滤掉所有没有handle
方法的classes。
我建议您阅读更多有关 inheritance, abstract classes and interfaces 的内容。