instanceof不与"或"

时间:2017-03-22 11:08:30

标签: java serialization reflection deserialization instanceof

我正在使用Java开展Web项目。

我的同事已完成套接字部分,包括对象序列化和反序列化。

我需要做的是开发将被序列化和反序列化的类以发送和接收它们。

序列图很简单:

  • 客户端将字符串发送到服务器
  • 服务器使用收到的字符串
  • 创建一个对象
  • 服务器将对象发送到客户端

我现在有两种物品:

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);
}

2 个答案:

答案 0 :(得分:2)

我使用以下代码进行了测试:

Object x = 1; // afterwards = ""

if (x instanceof String || x instanceof Integer) {
    System.out.println("Hurray!");
}

在这两种情况下:x = 1x = ""都会打印字符串Hurray!。因此,我猜您的obj既不是T1类型也不是T2类型。

答案 1 :(得分:0)

我认为您的问题是 - 您收到的T1和T2值为null,

仅在这种情况下,条件不会得到验证。

请调试并检查您在步骤中收到的T1和T2的值。

您可以使用此代码 - 并在

的实例之前添加空检查