我有一个名为PacketType
的枚举。然后,我有一个名为Packet
的类和一个扩展了DummyPacket
的类Packet
。
public class Packet {
}
public class DummyPacket extends Packet {
public void handle() {
}
}
我想要某种处理程序,以便当我得到一些对象包时,我想从-DummyPacket`中调用handle()
方法。是否可以通过某种方式对此进行软编码,或者我必须做
Packet instanceof DummyPacket
对于扩展Packet的每个类?
我尝试使用Class<?>.isInstance()
,但这无济于事,因为我无法获取Class<?>
来调用该方法:
我有点想这样称呼它:
公共静态无效句柄(数据包){ 如果(packet.getType()。clazz.isInstance(packet)){ packet.getType()。clazz.handle(); } }
答案 0 :(得分:2)
您应该可以这样做:
public void callHandle(Packet packet) {
if (packet instanceof DummyPacket) {
((DummyPacket) packet).handle();
}
}
[EDIT]在OP提供了更多信息之后,事实证明,他正在寻找一种方法,使多个类具有具有相同签名的方法。
您正在寻找的是接口。看一下这些类:
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 { }
在此示例中,您拥有extend
类Packet
的3个类:
DummyPacket
OtherPacket
LastPacket
但是只有两个实现Handleable
接口的类:
DummyPacket
OtherPacket
这意味着您可以检查类是否具有handle
方法,如下所示:
public void callHandle(Handeable someClass) {
someClass.handle();
}
现在,我们可以过滤掉所有没有handle
方法的类。
我建议您阅读有关inheritance,abstract classes和interfaces的更多信息。