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

标签 java sockets casting

我有两个不同的包“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.taskback.task 中较低的位置导入

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

相关文章:

c++ - C/C++ 事件驱动监控非子程序的终止

java - 测量 HTTP、HTTPS、SOCKS 代理的运行状况

qt - 为什么 qobject_cast 和dynamic_cast 在连接到 QWidget::destroyed 的槽中失败?

python - python 中的recvmsg 相当于什么?

java - 无法从 Object 转换为 List,但它已经是一个 List?

转换具有多种类型(包括列表!)的列表的 Pythonic 方法

java - 使用 Java 8 自签名证书

java - iText 创建页面大小不等的文档

java - Maven 多模块 - 打包后步骤

java - Google JIB 创建的 Docker Image 不包含 spring rest 文档的 asciidoc