- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题与以下问题完全相同:
讽刺的是,Michael Bogswardt 也回答了。
<小时/>Michael Bogswardt生成serialVersionUID的答案让我思考。是否有任何理由生成像 eclipse 和 IDEA 这样的正确的serialVersionUID(或者只是简单的serialver)?或者插入 1L 也同样好吗?
最佳答案
一旦你在其中写入了一个数字(任何数字),当你对类进行破坏兼容性的更改时,你就有责任修改它(例如,更改 JavaDoc 不会破坏它,添加属性肯定会破坏它)。
如果您避免指定 serialVersionUID
,javac
会在其中放置一些唯一的内容,例如类的哈希值。
什么时候重要?当您将内容序列化到磁盘并希望稍后使用不同版本的程序加载它时。或者当两个可能具有不同版本的实例需要通过线路交换序列化数据时。
如果您不使用实际的序列化,并且您的类只是因为继承了该接口(interface)而Serialized
,那么避免使用serialVersionUID
是最简单、最安全的事情。如果您确实序列化但并不真正需要与过去兼容,则同样,在这种情况下,避免该值是最安全的事情。
在第二条评论后添加(罗宾):
Doesn't answer the actual question.
呃,对。我想这是一个:不,据我所知,实际数字没有任何意义,它只需要与以前的所有值不同,当它不再与它们兼容时。
Also, you should always declare a serialVersionUID for your Serializable classes
作为一般建议,我认为避免它是一个更好的解决方案:大多数时候你不需要与不同供应商的 JVM 交谈,你不需要反序列化很久以前的数据或实际需要的数据通过兼容性检查,大多数情况下序列化对象的生命周期都很短。
当然,对于不同的项目来说,这可能会非常不同,并且当您确实拥有长期存在的序列化对象时,您必须承担定义这些 UID 并正确维护它们的负担。
但是缺少 UID 意味着“快速失败,捕获错误”,而使用 1L(或任何其他常量)通常意味着“类发生变化,你不记得更新它,稍后会出现问题”,那么作为一般性建议,我认为第一个是更好的默认值。
关于java - 有理由使用真正的serialVersionUID吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1373405/
这个问题已经有答案了: What is a serialVersionUID and why should I use it? (25 个回答) 已关闭 6 年前。 您好,我有一个关于 SerialV
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 8 年前。 Improve t
我在java中使用序列化类,在这些类中我需要指定serialVersionUID和一些要初始化的长数字。默认情况下为 private static final long serialVersi
public static List abc = new ArrayList(){{ //Asks for SerialVersionUID abc.add(5L);
我目前正在编写一个项目,其中有一个可序列化的类 ClientRepository。该类不指定任何serialVersionUID。当我尝试运行我的程序时,出现以下异常: Exception in
这是我试过的: 我使用 -Xlint:serial 选项构建项目,但收到此警告: MyClass.java:42: warning: [serial] serializable class has
在我的 Java 程序中添加文档时,我意识到大多数类都需要声明一个 serialVersionUID 常量属性。我究竟应该如何记录这个属性?如果我使用默认与生成的串行版本 UID,我是否会以不同的方式
我在一篇文章中看到,JVM默认提供的serialVersionUid是一个对象的hashcode。如果我们不重写类中的hashcode方法,通常hashcode是对象的内存地址,反序列化时如何计算ha
我正在尝试开发我的个人图书馆类(class),但遇到了障碍。我的实用程序类包含静态方法和常量,以及用于各种数据结构和子实用程序的几个公共(public)内部类。这些类不是静态嵌套类,它们旨在被实例化、
我已经阅读了一些有关 Java 如何控制对可序列化对象的访问的问题和讨论。我的问题是关于外部化对象以及为什么serialVersionUID应该影响它。我期望答案是“因为Externalized接口(
这个问题在这里已经有了答案: 关闭10 年前。 Possible Duplicate: What does it mean: The serializable class does not decl
serialVersionUID 字段未命名为 SERIAL_VERSION_UID 是否有任何可行的原因? 根据 java.io.Serializable 的文档: A serializable c
当我在 Eclipse 中创建实现 Serializable 接口(interface)的 Java 类时,我收到警告 The serializable class ABCD does not dec
这个问题在这里已经有了答案: What is a serialVersionUID and why should I use it? (25 个答案) 关闭 9 年前。 在我的采访中,我有一个问题如
这个问题在这里已经有了答案: What is a serialVersionUID and why should I use it? (25 个答案) 关闭 4 年前。 如果我改变这个方法: pub
如果我实现 Externalizable,我是否需要在该类中指定 serialVersionUID 以实现版本兼容性? 换句话说,Java 在反序列化 Externalizable 对象时是否检查 s
我是 java 的新手,我有一个 Products 类,它是 Serializable。我不知道我做了什么,但我的程序停止工作并给了我这个错误: Exception in thread "main"
这个问题在这里已经有了答案: What is a serialVersionUID and why should I use it? (25 个答案) 关闭 9 年前。 每当我们尝试 seriali
我遇到了一个扩展异常的异常处理程序类,如下所示: public class AppFileReaderException extends Exception { //Explicit seri
如果我为我的类编写了一个 serialversionUid,比如 1234,并且我知道我的程序中没有其他类使用它,这样好吗,还是我总是必须使用编译器生成的 uid? 最佳答案 serialVersio
我是一名优秀的程序员,十分优秀!