我正在为基于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,它也将起作用。