我正在使用 Java 开发一个 Web 项目。
我的同事已经完成了socket部分,包括对象序列化和反序列化。
我需要做的是开发将被序列化和反序列化以发送和接收它们的类。
序列图很简单:
- 客户端向服务器发送一个字符串
- 服务器使用接收到的字符串创建一个对象
- 服务器将对象发送给客户端
我现在有两种对象:
class T1{public int i1 = 1;}
class T2{public int i2 = 2;}
//both classes have implemented Serializable and override toString
我做的事情如下:
Object obj = class.forName(strFromClient).newInstance();
if(obj instanceof T1 || obj instanceof T2)
{
// send obj to client with my colleague's method
send(obj);
}
客户端可以成功接收T1
类型的obj,客户端可以System.out.println(obj)
得到1
.
令我惊讶的是,当我对 T2
执行同样的操作时,它不起作用。当客户端尝试 System.out.println(obj)
时,会显示 0
,而我期待的是 2
。我还尝试将 String
添加到 T2 中,客户端收到 NullException
,这意味着接收到的 obj 中的字符串为 null
。
我不太明白为什么,但如果我像这样更改代码,一切都会好起来的:
Object obj = class.forName(strFromClient).newInstance();
if(obj instanceof T1)
{
// send obj to client with my colleague's method
send(obj);
}
else if(obj instanceof T2)
{
// send obj to client with my colleague's method
send(obj);
}
最佳答案
我使用以下代码进行了测试:
Object x = 1; // afterwards = ""
if (x instanceof String || x instanceof Integer) {
System.out.println("Hurray!");
}
在这两种情况下:x = 1
或 x = ""
都会打印字符串 Hurray!
。因此我猜你的 obj
既不是 T1
类型,也不是 T2
类型。
关于java - instanceof 不适用于 "or",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42949917/