我正在为基于Apache MINA的协议项目创建测试平台。在MINA中,当您收到数据包时,messageReceived()方法将获得一个对象。理想情况下,我想使用JUnit方法assertClass(),但是它不存在。我在四处寻找可以得到的最接近的东西。我正在尝试寻找类似于instanceof的东西。

目前我有:

public void assertClass(String msg, Class expected, Object given) {
    if(!expected.isInstance(given)) Assert.fail(msg);
}

调用此:
assertClass("Packet type is correct", SomePacket.class, receivedPacket);

这没有问题,但是在尝试和玩这个游戏时,instanceof运算符使我的兴趣达到了顶峰。
if (receivedPacket instanceof SomePacket) { .. }

instanceof如何使用SomePacket引用手头的对象?它不是对象的实例,不是类,这是什么?一旦确定了SomePacket的类型,是否有可能将我的assertClass()扩展为不必包括SomePacket.class参数,而是支持SomePacket

最佳答案

instanceof的参数是类/接口名称,它直接作为JVM指令实现。因此,它非常有效。

http://java.sun.com/docs/books/jvms/second_edition/html/Instructions2.doc6.html#instanceof

instanceof而不是比较类的一个优点是,如果已代理该类,instanceof仍然可以工作。

如果要检查的对象为null,它也将起作用。

10-07 19:12
查看更多