从Object转换为T.

时间:2014-07-26 14:24:40

标签: java sockets exception casting stream

我正在研究一个类来简化套接字的处理。我有一个InputStream,它包含收到的消息,我想将它转换为用户在声明我的类时定义的另一个类。这就是代码

private T read() throws IOException, ClassNotFoundException{
    ObjectInput ois = new ObjectInputStream (reader);
    T message = (T) ois.readObject();
    return message;
}

但它抛出异常:ClassNotFoundException 我知道为什么。当T是String类型时它运行良好但是当它是自定义类时它不会。

所以我在这里问:p 提前谢谢

3 个答案:

答案 0 :(得分:1)

请仔细检查序列化对象中定义的所有类型是否也在类型T中定义。

我认为@fabian是正确的。

答案 1 :(得分:0)

您可以尝试将邮件设为Object吗?

ObjectInput ois = new ObjectInputStream (my_input_stream);
Object message = (Object) ois.readObject();

或尝试在方法声明中添加<T>

private <T> T read() throws IOException, ClassNotFoundException{
    ObjectInput ois = new ObjectInputStream (reader);
    T message = (T) ois.readObject();
    return message;
}

答案 2 :(得分:0)

这似乎不是演员表的问题,而是从Object阅读ObjectInputStream。以下是ObjectInputStream.readObjectClassNotFoundException的说明:

  

无法找到序列化对象的类。

这意味着您忘记将InputStream中的某些类别的数据添加到类路径中。