gpt4 book ai didi

java 对象不能从不同的包源转换

转载 作者:行者123 更新时间:2023-11-30 08:00:54 24 4
gpt4 key购买 nike

我有两个不同的包“mas.back.task.Checker”和“mas.front.task.Checker”,其中“Checker”是类,我实现了通过字节缓冲区的序列化将类从客户端套接字发送到服务器套接字,我成功序列化了,但是当从“mas.front.task.Checker”转换为“mas.back.task.Checker”时,它不起作用,这里出现错误消息:

Exception in thread "pool-1-thread-2" java.lang.ClassCastException: mas.front.task.Checker cannot be cast to mas.back.task.Checker

此处通过客户端套接字将类发送到服务器套接字的代码:

public static final Object convertByteToObject(byte[] bytes) {
ObjectInput in;
try {
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
in = new ObjectInputStream(bis);
return in.readObject();
} catch (IOException | ClassNotFoundException ex) {
Logger.getLogger(Converter.class.getName()).log(Level.SEVERE, null, ex);
return null;
}
}

public static final byte[] convertObjectToByte(Object object) {
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutput out = new ObjectOutputStream(bos);
out.writeObject(object);
return bos.toByteArray();
} catch (IOException ex) {
Logger.getLogger(Converter.class.getName()).log(Level.SEVERE, null, ex);
return null;
}
}

我确认 Checker 类中的所有字段都是相同的,我也尝试了“Checker checker = new Checker()”,但是当“checker = (Checker) object”时,错误显示如上消息,所以怎么能我解决这个问题?

备注:

public class Checker implements Serializable {
public String JobID;
public String JobUserID;
public int JobInterval;
public String JobStatus;
}

最佳答案

如果两个Checker类属于不同的包,则它们是不同的。您确保它们在类中定义的字段甚至方法方面相同并不重要 - 它们具有不同的包层次结构,因此不相同。 无需对实例进行序列化或反序列化即可轻松重现此问题。只需尝试从一个包中声明一个 Checker 类型的变量,然后将其转换为另一个包即可。

为什么不将 Checker 提取到包层次结构较高的公共(public)包中,可以在 front.taskback.task 中导入较低的包?

关于java 对象不能从不同的包源转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38113966/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com