草庐IT

serialVersionUIDs

全部标签

java - 使用 serialVersionUID 还是禁止警告?

我想创建一个类,例如,扩展HttpServlet?我的编译器警告我,我的类应该有一个serialVersionUID。如果我知道这个对象永远不会被序列化,我应该定义它还是添加注释来禁止这些警告?你会做什么,为什么? 最佳答案 我不知道Java的最佳实践,但我突然想到,如果你声称序列化永远不会发生,你可以添加一个writeObject方法来抛出。然后压制警告,知道它不可能适用于您。否则将来有人可能会通过父类序列化您的对象,并以默认的序列化形式结束:该表单在您的代码的不同版本之间不兼容。您已取消显示这种情况的警告。添加一个ID听起来像是

java - 使用 serialVersionUID 还是禁止警告?

我想创建一个类,例如,扩展HttpServlet?我的编译器警告我,我的类应该有一个serialVersionUID。如果我知道这个对象永远不会被序列化,我应该定义它还是添加注释来禁止这些警告?你会做什么,为什么? 最佳答案 我不知道Java的最佳实践,但我突然想到,如果你声称序列化永远不会发生,你可以添加一个writeObject方法来抛出。然后压制警告,知道它不可能适用于您。否则将来有人可能会通过父类序列化您的对象,并以默认的序列化形式结束:该表单在您的代码的不同版本之间不兼容。您已取消显示这种情况的警告。添加一个ID听起来像是

java - serialVersionUID 是否由子类继承,如果我在父类(super class)中有默认的 serialVersionUID

关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。ImprovethisquestionserialVersionUID是否由子类继承,如果我在父类(superclass)中有默认的serialVersionUID?类似于当父类(superclass)可序列化时,子类也可序列化。我最初有一个没有默认serialVersionUID的父类(superclass),所以我得到:localclassincompatible:streamclassdescserialVersionUID=-

java - 关于序列化、serialVersionUID、类不兼容

我在这里看到了几个相关的问题和答案,但他们似乎没有帮助。所以我想我需要在这里发布一个单独的问题:我有一个可序列化的类MyDataClass,它包含了几个可序列化的内部类。我使用FileOutputStream和ObjectOutputStream将其保存到一个文件中。回读时,我有时会遇到异常(可能是ClassNotFoundException或InvalidClassException但我不确定),异常消息如下所示:12-0118:44:16.479:D/MyAppName(534):*****exceptionoccurredcom.xyz.myapp.lib.am;Incompat

java - 移动类包时抛出 Serializable class not found CLASSNAME 错误(即使 serialVersionUID 已在类中说明)

我正在使用Redis(通过redisson)我有一个DTO类,我正在将其序列化并反序列化到Redis,我使用的编解码器是:org.redisson.codec.FstCodec尽管在类的DTO类中显式设置了serialVersionUID,但当我将该类移动到不同的命名空间时,我得到以下异常:java.io.IOException:java.lang.RuntimeException:classnotfoundCLASSNAME:db.data.coins.CoinDTOloader:jdk.internal.loader.ClassLoaders$AppClassLoader@6ed3

java - 每次更改时 Eclipse 自动生成 serialVersionUID

Eclipse很好地为我生成了serialVersionUID。但这似乎是被动代码生成,因为id不会在我更改文件时自动更新,除非我再次生成。有什么方法可以在每次更改内容时生成serialVersionUID?“保存操作”似乎不包含这样的选项-有人找到了执行此操作的方法吗?如果它可以与IDE保存操作或类似的东西结合使用,这样我就可以在不影响序列化的情况下恢复更改。最好的问候,灯子编辑:@gustafc:这有两个要点:如果我没理解错的话,不同的编译器可能会得到不同的serialVersionUID值来自SerializableAPI:但是,强烈建议所有可序列化类显式声明serialVers

java - 让 Java 运行时忽略 serialVersionUIDs?

我必须处理大量未明确指定serialVersionUID的已编译Java类。因为它们的UID是由编译器任意生成的,许多需要序列化和反序列化的类最终会导致异常,即使实际的类定义是匹配的。(当然,这都是预期的行为。)返回并修复所有这些第3方代码对我来说是不切实际的。因此,我的问题是:有什么方法可以让Java运行时忽略serialVersionUID的差异,并且仅在结构存在实际差异时才反序列化失败? 最佳答案 如果您有权访问代码库,则可以使用SerialVertaskforAnt在可序列化类源代码中插入修改serialVersionUID

java - serialVersionUID 对于不同的类应该是唯一的吗?

classAimplementsSerializable{privatestaticfinallongserialVersionUID=5L;...}和classBimplementsSerializable{privatestaticfinallongserialVersionUID=6L;...}那么有必要为两个类提供唯一的serialVersionUID。那么我可以为两个类分配serialVersionUID=5L吗?我阅读了以下链接WhygeneratelongserialVersionUIDinsteadofasimple1L?WhatisaserialVersionUIDa

java - 1L serialVersionUID 是什么意思?我什么时候可以使用这个默认值 1L?

有3种方式定义serialVersionUID:1.privatestaticfinallongserialVersionUID=1L;(Default)2.privatestaticfinallongserialVersionUID=-8940196742313994740L;(Generated)3.Don'tdefineserialVersionUIDandlettheJVMdefineitatruntime.@LanceJava但是我不明白第一种方式!我已经看到有人为源代码中的所有java类定义了“serialVersionUID=1L”。什么意思?有用吗?如果所有的类都有相同

java - "declare a static final serialVersionUID"警告是什么意思以及如何解决?

这个问题在这里已经有了答案:关闭10年前.PossibleDuplicate:Whatdoesitmean:TheserializableclassdoesnotdeclareastaticfinalserialVersionUIDfield?Java编译器警告:可序列化类[*****]未声明long类型的静态最终serialVersionUID字段。为什么?如何解决? 最佳答案 这解释得很好here:TheserialVersionUIDisauniversalversionidentifierforaSerializablecl