Java 即使在定义了显式ID之后也会使用隐式SerialVersionID,为什么?

Java 即使在定义了显式ID之后也会使用隐式SerialVersionID,为什么?,java,serialization,serialversionuid,Java,Serialization,Serialversionuid,在我的类中,我显式地提供了serialVersionUID,但是在命令提示符中为同一类使用“serialver”命令时,UID也是由系统生成的 有没有人能解释一下对显式语法使用的理解 和隐式序列化版本UID class Emp implements Serializable { private static final long serialversionUID = 1293488886969693L; int

在我的类中,我显式地提供了serialVersionUID,但是在命令提示符中为同一类使用“serialver”命令时,UID也是由系统生成的
有没有人能解释一下对显式语法使用的理解 和隐式序列化版本UID

   class Emp implements Serializable {
 private static final long serialversionUID =
                             1293488886969693L;


       int age;


 public Emp(int age)
 {
     this.age = age;
 }

 }

serialver
只是在给定类上计算此类ID的工具。Java定义了一种从类定义计算ID的方法。在类中定义它只是选择该ID的一种方式。许多IDE使用
serialver
自动计算其值,但您可以自己编辑该值并选择任何一个所需的值


您可能会读到

serialver
只是在给定类上计算此类ID的工具。Java定义了一种从类定义计算ID的方法。在类中定义它只是选择该ID的一种方式。许多IDE使用
serialver
自动计算其值,但您可以自己编辑该值并选择任何一个所需的值



您可以读取

隐式UID可能会随着VM的变化而变化,因为它是使用类中的信息创建的。因此,两个不同虚拟机中可能相同的两个类没有相同的UID,这会破坏序列化。我理解详细阐述的场景,但我不理解的是显式ID的使用或应用,就像虚拟机正在生成其单独的ID一样,显式ID将用于或可用于反序列化的位置?或该上下文中的任何位置。不需要显式定义的serialVersionUID。某些IDE会发出警告,但不会发出错误(除非您更改默认设置并自己将此警告转换为错误),如果不需要,那么为什么这是一种技术自由,或者为什么允许这样做?当我们这样做的时候,它在技术上意味着什么?隐式UID可能会随着VM的变化而变化,因为它是用类中的信息创建的。因此,两个不同虚拟机中可能相同的两个类没有相同的UID,这会破坏序列化。我理解详细阐述的场景,但我不理解的是显式ID的使用或应用,就像虚拟机正在生成其单独的ID一样,显式ID将用于或可用于反序列化的位置?或该上下文中的任何位置。不需要显式定义的serialVersionUID。某些IDE会发出警告,但不会发出错误(除非您更改默认设置并自己将此警告转换为错误),如果不需要,那么为什么这是一种技术自由,或者为什么允许这样做?我们这样做在技术上意味着什么?我理解详细阐述的场景,但我不理解的是显式ID的使用或应用,就好像VM正在生成其分离的ID一样,显式ID将在哪里使用或可以用于反序列化?或者在这种情况下的任何地方当您显式定义该UID时,将使用它,否则将生成隐式UID并used@Maha-Dev您可能有自己的生成ID的策略。所以显式的是一种强制执行它的方法。但这里发生的是当我序列化这个(Emp)类的对象时,以及在序列化之后修改显式定义的ID时,在我的理解中,反序列化应该在序列化之前和之后的类状态之间产生冲突,即。,依赖于序列化后修改的“ID值”因子。但是经过观察,我发现序列化和反序列化时使用的ID值是隐式的,而不是显式的。这就给我提出了一个问题,我应该在何时何地使用显式ID。在无法观察到你在做什么的情况下,很难回答。重要的是,当反序列化时,您需要使用一个ID与用于序列化的ID相同的类。但这个值并不重要。我理解详细阐述的场景,但我不理解的是显式ID的使用或应用,就像虚拟机正在生成其分离的ID一样,显式ID将在哪里使用或可以用于反序列化?或者在这种情况下的任何地方当您显式定义该UID时,将使用它,否则将生成隐式UID并used@Maha-Dev您可能有自己的生成ID的策略。所以显式的是一种强制执行它的方法。但这里发生的是当我序列化这个(Emp)类的对象时,以及在序列化之后修改显式定义的ID时,在我的理解中,反序列化应该在序列化之前和之后的类状态之间产生冲突,即。,依赖于序列化后修改的“ID值”因子。但是经过观察,我发现序列化和反序列化时使用的ID值是隐式的,而不是显式的。这就给我提出了一个问题,我应该在何时何地使用显式ID。在无法观察到你在做什么的情况下,很难回答。重要的是,当反序列化时,您需要使用一个ID与用于序列化的ID相同的类。但这一价值并不重要。