Serializable如何工作?

时间:2012-06-01 15:32:56

标签: java serializable

这个问题不是关于如何使用 Serializable,我已经知道了。但是,我想知道实施Serializable如何提出以下警告:

The serializable class MyClass does not declare a static final serialVersionUID field of type long

假设我想编写一个像Serializable这样的接口,我如何“警告”程序员实现我的接口来声明一个变量?我已经尝试查看Serializable.java的源代码,但我找不到任何会导致此行为的内容。这有可能吗?

谢谢!

2 个答案:

答案 0 :(得分:5)

我认为使用注释和注释处理器可以更好地实现您正在寻找的行为。编译器警告您不声明serialVersionUID的事实由编译器级别的不同机制处理(因此,程序员无法访问);它更像是序列化API强制执行的编码约定,而不是实现Serializable接口的结果。

事实上,here您可以检查Serializable的源代码,正如您所看到的,强制编译器警告没有什么特别之处:

/* comments removed for brevity */
package java.io;
public interface Serializable {
}

答案 1 :(得分:4)

不,我不认为只用Java(可能有一些注释?不确定)。

事实是Serializable接口不是普通的Java接口,而是更多的标记元素,它用作接口,但它是特殊的,所以它在它的处理编译器自己的方式(因为它的含义表示一个功能,比如接口,默认情况下在代码中没有透明地实现)。