3

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

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

假设我想编写一个类似的接口Serializable,我将如何“警告”实现我的接口的程序员声明一个变量?我试过查看源代码,Serializable.java但找不到任何会导致这种行为的东西。这甚至可能吗?

谢谢!

4

2 回答 2

5

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

事实上,在这里您可以检查源代码,Serializable并且如您所见,强制编译器警告并没有什么特别之处:

/* comments removed for brevity */
package java.io;
public interface Serializable {
}
于 2012-06-01T15:34:24.040 回答
4

不,我认为仅使用 Java 是不可能的(也许有一些注释?不确定)。

事实是这个Serializable接口不是一个普通的Java接口而是一个标记元素,它被用作一个接口但它是一个特殊的东西,所以它由编译器以自己的方式处理(因为它的含义表达了一种功能,就像接口,默认情况下不会在代码中透明地实现)。

于 2012-06-01T15:35:18.597 回答