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 的内容。