Java 序列化是如何工作的?
这个问题不是关于如何使用可序列化的,我已经知道了。但是,我想知道实现Java 序列化是如何工作的?,java,serializable,Java,Serializable,这个问题不是关于如何使用可序列化的,我已经知道了。但是,我想知道实现Serializable会如何带来以下警告: 可序列化类MyClass未声明long类型的静态最终SerialVersionId字段 假设我想编写一个像Serializable这样的接口,我该如何“警告”实现我的接口的程序员声明一个变量?我曾尝试查看Serializable.java的源代码,但找不到任何可能导致这种行为的东西。这可能吗? 谢谢 我认为使用注释和注释处理器可以更好地实现您正在寻找的行为。编译器警告您不要声明
Serializable
会如何带来以下警告:可序列化类MyClass未声明long类型的静态最终SerialVersionId字段
假设我想编写一个像
Serializable
这样的接口,我该如何“警告”实现我的接口的程序员声明一个变量?我曾尝试查看Serializable.java
的源代码,但找不到任何可能导致这种行为的东西。这可能吗?谢谢 我认为使用注释和注释处理器可以更好地实现您正在寻找的行为。编译器警告您不要声明
serialVersionUID
这一事实是由编译器级别的不同机制处理的(因此,程序员无法处理);它更像是序列化API强制执行的编码约定,而不是实现Serializable
接口的结果
事实上,您可以检查的源代码,如您所见,强制编译器警告没有什么特别之处:
/* comments removed for brevity */
package java.io;
public interface Serializable {
}
不,我认为仅仅用Java是不可能的(可能有一些注释?不确定)
事实上,
Serializable
接口不是一个普通的Java接口,而是一个标记元素,它被用作一个接口,但它是一种特殊的东西,因此编译器以自己的方式处理它(因为它的含义表达了一种功能,如接口,默认情况下在代码中不透明地实现).是的,Java编译器可能会执行一些特殊操作来打印该警告。我不认为你自己可以用Java编写这样的程序。Serializable
在语言和编译器中有很多内置的魔力,你无法在你的普通库中复制。我认为@Jack有很多优点。内森,问题是你有多想要这个?这篇文章描述了一个可能的解决方案,尽管它看起来需要做大量的工作。请让我们知道它是否有效。Java编译器不会打印该警告。有些人喜欢。谢谢!这就是我想要的:)