我有两个不同的包“mas.back.task.Checker”和“mas.front.task.Checker”,其中“Checker”是类,我实现了使用bytebuffer的序列化将类从客户端套接字发送到服务器套接字,我成功序列化,但是当从“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
提取到包层次结构中较高位置的通用包中,该包可以在 front.task
和 back.task 中较低的位置导入
?
关于java 对象不能从不同的包源进行转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38113966/