【发布时间】:2011-10-25 19:31:19
【问题描述】:
我想知道为什么当我将匿名实例化与实例初始化程序块一起使用时,会收到“可序列化类未声明 long 类型的静态最终 serialVersionUID 字段”编译时警告。
这就是我的意思。假设我想实例化一个 ArrayList 并同时向它添加一些东西,如下所示:
ArrayList<Object> arrayList = new ArrayList<Object>(){{add(new Object());}};
如果我编译这一切都没问题,但我收到 serialVersionUID 字段丢失警告。现在 ArrayList 已经实现了可序列化并且有一个 private static final long serialVersionUID 那么为什么当我这样使用它时,该字段似乎“消失”并且我收到了没有声明它的警告?
【问题讨论】:
-
这太傻了。今天很少有人使用 Java 序列化,这样的通用警告是没有根据的。而且我永远无法忘记 Eclipse 用户将 IDE 称为 不合格的编译器。
-
@irreputable 是不是有一些注释可以抑制这个?我的意思是,如果他们可以为未经检查的强制转换做到这一点,那么您肯定会期望像 UID 这样的东西可以忽略不计。
-
@irreputable:嗯,我不同意你声明的第一部分。序列化具有很好的界定用途。此外,如果您的实例位于应用服务器的 HttpRequest 对象中,并且该应用服务器决定钝化并序列化它,该怎么办?而关于 Eclipse 的部分我不明白。 Eclipse 可以使用编译器编译您的 Java 代码,您也可以在控制台中手动编译它(在这种情况下使用 -Xlint 来显示警告,我总是这样做)。你能澄清一下吗?
-
@irreputable - 仅仅因为你不需要序列化和/或其高级功能并不意味着世界其他地方分享你的情怀。例如版本控制对于构建一个健壮的分布式系统很有用,其中不同的组件可能不会同时升级。
标签: java initialization anonymous-types