相关疑难解决方法(0)

什么是serialVersionUID,我为什么要使用它?

serialVersionUID缺少时,Eclipse会发出警告.

可序列化类Foo不声明long类型的静态最终serialVersionUID字段

serialVersionUID它是什么以及为什么重要?请显示缺失serialVersionUID会导致问题的示例.

java serialization serialversionuid

2880
推荐指数
21
解决办法
86万
查看次数

IntelliJ IDEA生成serialVersionUID

如何在IntelliJ IDEA中生成此值?

我转到设置 - > 错误 - > 序列化问题 - >没有'serialVersionUID'的Serializable类,但它仍然没有显示警告.我的类PKladrBuilding父实现接口Serializable.

部分代码:

public class PKladrBuilding extends PRQObject

public abstract class PRQObject extends PObject

public abstract class PObject implements Serializable
Run Code Online (Sandbox Code Playgroud)

java serialization intellij-idea

287
推荐指数
7
解决办法
21万
查看次数

在Java中扩展Serializable类时,我选择serialVersionUID是否重要?

我正在扩展一个实现Serializable接口的类(ArrayBlockingQueue).Sun的文档(和我的IDE)告诉我,我应该设置这个值以防止恶作剧:

但是,强烈建议所有可序列化类显式声明serialVersionUID值,因为默认的serialVersionUID计算对类细节高度敏感,这些细节可能因编译器实现而异,因此在反序列化期间可能导致意外的InvalidClassExceptions.

现在,我不在乎放在那里的价值.有关系吗?

java serialization

42
推荐指数
2
解决办法
8719
查看次数

serialVersionUID应该是不同类的唯一吗?

class A implements Serializable{
    private static final long serialVersionUID = 5L;
    ...
}
Run Code Online (Sandbox Code Playgroud)

class B implements Serializable{
    private static final long serialVersionUID = 6L;
    ...
}
Run Code Online (Sandbox Code Playgroud)

那么有必要给serialVersionUID这两个类赋予独特性.

那么我可以分配serialVersionUID = 5L两个班级吗?

我读了以下链接

为什么要生成long serialVersionUID而不是简单的1L?

什么是serialVersionUID,我为什么要使用它?

java serialization

17
推荐指数
2
解决办法
7296
查看次数

为什么使用随机数作为串行版UID?

编辑:随机我的意思是一个大的计算数字,对我们作为开发人员没有语义含义

实现Serializable接口时,最佳做法是指定串行版本UID非常重要.在很多地方,我经常看到使用随机数字.例如

Effective Java(第2版)第312页:

private static final long serialVersionUID = 234098243823485285L;
Run Code Online (Sandbox Code Playgroud)

从Java 6中的String类:

private static final long serialVersionUID = -6849794470754667710L;
Run Code Online (Sandbox Code Playgroud)

从Java 6中的ArrayList类:

private static final long serialVersionUID = 8683452581122892189L;
Run Code Online (Sandbox Code Playgroud)

甚至eclipse提供了生成这些随机数的选项(尽管主要的默认值似乎是生成serialVersionUID 1L)

为什么要使用随机数?从1L开始并且当它像任何合理的版本控制一样变化时增加到2L是不是更有意义?我唯一能想到使用看似随机的数字的方法是,如果您没有指定serialVersionUID,并且现在想要这样做(这会将您绑定到运行时自动生成的版本以提供向后兼容性支持).

java serialization

11
推荐指数
1
解决办法
2281
查看次数

生成serialVersionID而不是1L,2L的好处,

我与一位同事讨论了可序列化类的serialVersionUID:他总是从a开始,serialVersionUID = 1L然后在对类进行一些重大更改时将其递增1.

JDK类似乎总是在类中使用更复杂的生成的serialVersionUID java.lang.String:

private static final long serialVersionUID = -6849794470754667710L;
Run Code Online (Sandbox Code Playgroud)

现在,我的同事询问这种serialVersionUID与简单的serialVersionUID(如1L,2L,3L ......)相比的优势?

我们还搜索了SOF,但对给出的答案不是很满意,例如在为什么生成long serialVersionUID而不是简单的1L?.

在我看来,使用生成的ID的优点是它不需要任何有关"旧"类版本的信息.但是当手动递增ID时,您必须知道到目前为止的最高值.这可能听起来微不足道(通过查看当前的serialVersionUID并将其增加1),但在更大的软件项目,更大的开发团队或分布式环境中可能更复杂.

java serialization serialversionuid

6
推荐指数
1
解决办法
266
查看次数

Java SerialVersionUid是1L还好吗?还是需要独一无二的?

我有两个实现Serializable的java类.我将它们都设置为1L的serialVersionUid.

同事说所有类必须具有唯一的串行版本uid,并且如果jvm具有相同的串行版本uid,则jvm将把类视为相等.我认为相等是基于equals方法的结果而不是串行版本uid.

我的理解是,串行版本uid用于指示类的版本,并且当类以不兼容的方式更改时,串行版本的uid应该递增.

那是对的吗?是否可以使用1的serialversion uid?或者java类从来没有1L的serialversion uid?

java serialization serialversionuid

4
推荐指数
1
解决办法
1363
查看次数

是否有理由使用真正的serialVersionUID?

这个问题与以下内容完全相同:

为什么要生成long serialVersionUID而不是简单的1L?

具有讽刺意味的是,Michael Bogswardt也回答道.


Michael Bogswardt对生成serialVersionUID的回答让我思考.有没有理由生成像eclipse和IDEA(或简单的serialver)这样的正确的serialVersionUID?或插入1L一样好?

java serialization

2
推荐指数
1
解决办法
1255
查看次数