Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java instanceof检查什么来确定对象类型?_Java_Networking_Packet_Instanceof_Kryonet - Fatal编程技术网

Java instanceof检查什么来确定对象类型?

Java instanceof检查什么来确定对象类型?,java,networking,packet,instanceof,kryonet,Java,Networking,Packet,Instanceof,Kryonet,我使用kryonet从服务器和客户端来回发送对象。有一个侦听器,在接收到对象时运行。确定对象实例的唯一方法似乎是使用: if(object instanceof ClientLoginPacket){ //Do stuff } 我想知道什么是instanceof检查,以确定对象是否为特定类型。它是否检查类是否与所有代码完全相同,是否检查变量和名称?它也检查进口的包裹吗?你给我的任何信息都可以帮助我 我之所以想知道这一点,是因为我制作数据包的方式,服务器方法中的代码与客户端不同。例如,在

我使用kryonet从服务器和客户端来回发送对象。有一个侦听器,在接收到对象时运行。确定对象实例的唯一方法似乎是使用:

if(object instanceof ClientLoginPacket){
    //Do stuff
}
我想知道什么是instanceof检查,以确定对象是否为特定类型。它是否检查类是否与所有代码完全相同,是否检查变量和名称?它也检查进口的包裹吗?你给我的任何信息都可以帮助我

我之所以想知道这一点,是因为我制作数据包的方式,服务器方法中的代码与客户端不同。例如,在我的客户端上发送数据包时,我会:

public void send(){
    Client.sendPacketTCP(this);
}
在我的服务器上,我执行以下操作:

public void send(){
    Server.sendPacketTCP(this);
}
我之所以想知道这一点,是因为我制作数据包的方式,服务器方法中的代码与客户端不同

我从未使用过Kryonet,但根据它的说法,这正是你不应该做的:

在客户机和服务器上注册完全相同的类,并且它们以完全相同的顺序注册,这一点非常重要


所以问问自己:为什么在客户端和服务器端使用不同的类?您是否可以找到一个抽象的“仅数据”类,它可以在两个方面都工作,并且只发送这个类?

instanceof是一条jvm指令,它可能是本机代码,但规范规定它必须执行以下操作:

我真的不认为它检查变量及其名称,这是无用的。它必须遍历类层次结构,直到它能够证明它属于某种类型:扩展、实现或它是同一个类

,根据,
isInstance#Object
方法是Java语言instanceof操作符的动态等价物

此方法测试指定类参数表示的类型是否可以通过标识转换或加宽引用转换转换为此类对象表示的类型


有关详细信息,请参阅Java语言规范第节和第5.1.4节。

我的测试结果: 一切都很重要(变量、方法、包声明,随便你怎么说!)

我不明白为什么人们说它不准确,事实上对我想做的事情来说太准确了,但我知道我需要做什么调整


谢谢大家的帮助

instanceof是糟糕设计的标志。这就是多态性应该处理的问题。如果您认为您的代码需要它,我建议重新设计,直到它不需要。我可以很容易地使用其他东西。但就我而言,支票的数量越少越好。我希望它只检查变量和类名。谢谢,这很有趣。是的,它们是同一个类,只是不同的代码,但你可能是对的。我必须对它进行更多的研究。我仍然想知道更多关于的
实例的信息,这可能会有所帮助。那么它们就不是同一个类了。它们是两个名称相同的不同类。只要它们具有相同的变量和方法,这有关系吗?只是方法中的代码不同。好的,谢谢您的帮助。今晚回家后我会做一些测试,然后把结果贴在这里