Java 具有相同SerialVersionUID的不同类

Java 具有相同SerialVersionUID的不同类,java,serialization,deserialization,Java,Serialization,Deserialization,我有一个奇怪的疑问。我只想知道 假设我在两个不同的位置(包或项目)有两个类(100%相同的结构),并且我负责为这两个类生成相同的serialVersionUID,我能安全地说使用一个类序列化和使用另一个类反序列化是正确的吗 另外,我明白把同一个班级分在两个不同的地方是不好的,但这不是现在的问题 非常感谢。ObjectInputStream将从输入数据中读取对象的原始完全限定类名,并尝试创建该类的实例。你不能改变这一点。序列化将查找原始类,无论serialVersionUID是什么。ObjectI

我有一个奇怪的疑问。我只想知道

假设我在两个不同的位置(包或项目)有两个类(100%相同的结构),并且我负责为这两个类生成相同的serialVersionUID,我能安全地说使用一个类序列化和使用另一个类反序列化是正确的吗

另外,我明白把同一个班级分在两个不同的地方是不好的,但这不是现在的问题


非常感谢。

ObjectInputStream将从输入数据中读取对象的原始完全限定类名,并尝试创建该类的实例。你不能改变这一点。序列化将查找原始类,无论serialVersionUID是什么。

ObjectInputStream将从输入数据中读取对象的原始完全限定类名,并尝试创建此类的实例。你不能改变这一点。序列化将查找原始类,无论serialVersionUID是什么。

谢谢。有了这个,我知道我只需要使用同一个类。我希望这是对的,绝对正确。事实上,您只能以一种方式使用该类—用readObject强制转换您读取的对象。那么,当您的类路径中没有“原始”类时,当您反序列化该类(不强制转换,保留readObject返回的对象)时会发生什么?它还会抛出ClassCastException吗?或者您可以使用反射来访问它的成员和值吗?如果我们在类路径上没有原始类,readObject将抛出ClassNotFoundExceptionTanks。有了这个,我知道我只需要使用同一个类。我希望这是对的,绝对正确。事实上,您只能以一种方式使用该类—用readObject强制转换您读取的对象。那么,当您的类路径中没有“原始”类时,当您反序列化该类(不强制转换,保留readObject返回的对象)时会发生什么?它还会抛出ClassCastException吗?或者您可以使用反射来访问其成员和值吗?如果在类路径上没有原始类,readObject将抛出ClassNotFoundException