instanceof 不适用于 "or"
instanceof doesn't work with "or"
我正在使用 Java.
开发一个网络项目
同事完成了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
。我还尝试在 T2 中添加一个 String
并且客户端得到一个 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
.
类型
我认为您的问题是 - 您收到的 T1 和 T2 值为空,
只有在这种情况下,条件才会得到验证。
请调试检查您在步骤中收到的T1和T2的值。
您可以使用此代码 - 并在
的实例之前添加空检查
我正在使用 Java.
同事完成了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
。我还尝试在 T2 中添加一个 String
并且客户端得到一个 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
.
我认为您的问题是 - 您收到的 T1 和 T2 值为空,
只有在这种情况下,条件才会得到验证。
请调试检查您在步骤中收到的T1和T2的值。
您可以使用此代码 - 并在
的实例之前添加空检查