java - instanceof 不适用于 "or"

标签 java serialization reflection deserialization instanceof

我正在使用 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 = 1x = "" 都会打印字符串 Hurray!。因此我猜你的 obj 既不是 T1 类型,也不是 T2 类型。

关于java - instanceof 不适用于 "or",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42949917/

相关文章:

java - LinkedList 超出内存限制

json - 如何序列化 Moose 对象,包括嵌套的 Moose 对象

c# - 使用 System.Reflection 加载 ASP.NET 2.0 aspx 页面?

java - 将引用属性传递给 spring webflow 中的操作状态评估

java - Eclipse 的自定义构建规则

.net - 如何使 sgen.exe 保留程序集的版本?

c# - 如何将接口(interface)反序列化为另一个程序集的内部类?

c# - 反射:从父类获取静态方法

java - 如何使用java反射查找成员的访问修饰符

java - 将数据库中的值设置为用枚举填充的 Jcombobox