Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不能从不同的包源强制转换java对象_Java_Sockets_Casting - Fatal编程技术网

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

不能从不同的包源强制转换java对象,java,sockets,casting,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.ClassCastExcep

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

原因是通过序列化或反序列化通过TCP/IP套接字发送类,对于该类,前端客户端为mas.front.task.XXX,后端为mas.back.task.XXX,您对上述内容有何建议?第二个原因是我不仅需要发送检查程序类型,还需要发送其他类型的。您是否编写了检查程序类?是的,我确定,因为我有前端和后端服务器,它们不是相同的包路径,当然……@AndyChan用另一种方式表达Amir的建议,您应该将
Checker
放在一个单独的库项目中,该库项目由前端和后端项目使用。也许你可以称它为
mas.common.task.Checker