【问题标题】:Checking if an object from ObjectInputStream is a particular type检查来自 ObjectInputStream 的对象是否是特定类型
【发布时间】:2013-11-29 16:16:04
【问题描述】:

大家好,我想做类似的事情

if((Color[])objectIn2.readObject() instanceof Color[]){
     //do something
}

但这似乎不起作用,那么我该如何做类似的事情呢? objectIn2 将是一个 objectinputStream

【问题讨论】:

  • 你现在做的是objectIn2.readObject(),将结果转换为Color[],然后检查Color[]是否是Color[]....
  • 你想保留对象还是只检查它的类型?

标签: java sockets


【解决方案1】:

你正在施放,同时检查你是否可以安全施放。改为在投射前检查:

Object o = objectIn2.readObject();
if (o instanceof Color[]) {
    Color[] colors = (Color[]) o;
    // do something
}

【讨论】:

    【解决方案2】:

    像这样工作:

    if(objectIn2.readObject() instanceof Color[]){
       //do something
    }
    

    【讨论】:

    • 这只是检查类型并将其丢弃。
    • 除了现在,他再也拿不到它的颜色数组了。
    • 但也许这就是他想要的,因为他在他的帖子中做同样的事情;-)当然他可以先保存对象,然后检查。
    【解决方案3】:

    试试看

        object p = objectIn2.readObject();
        Color[] c;
    
        if(p instanceof Color[]){
        //Do somthing
            c = (Color[]) p;
    }
    

    更多信息:

    Why cast after an instanceOf?

    【讨论】:

    • 但是它不会是一个对象而不是 Color[] 吗?我假设 readObject 返回了一个对象,所以我必须将它转换为 Color[],然后再将它用作 Color[] ?
    • 好的,但是为什么这不起作用: if(objectIn2.readObject() instanceof Color[])a = (Color[]) objectIn2.readObject();而这项工作: a = (Color[]) objectIn2.readObject;即没有 if
    • 感谢您的信息,但是当它前面有 if 语句时,我得到一个“无效的类型代码:30”我搜索但找不到任何东西是什么?
    猜你喜欢
    • 2012-02-07
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 2020-01-02
    • 1970-01-01
    • 2014-07-28
    • 2011-03-06
    相关资源
    最近更新 更多