特殊标识符:serialVersionUID 和 serialPersistentFields

Joh*_*her 3 java serialization javac serialversionuid

我了解这些字段是什么以及如何使用它们,但我想知道:

Java 编译器如何在其编译步骤中实际处理这样的特殊字段?它真的只根据名称查找变量吗?

这看起来很像非 Java... 除了serialVersionUIDand 之外serialPersistentFields,还有其他的吗?

Bri*_*etz 6

不幸的是,是的,这些成员是在运行时通过名称神奇地发现的。(实际上,它更糟;无论它们是静态的还是非静态的、公共的还是私有的等等,都适合查找。)您是对的,这不是一个好的做法,也不是很像 Java,但这是我们的遗产被困住了。

有关完整列表,请参阅序列化规范:https : //docs.oracle.com/en/java/javase/11/docs/specs/serialization/index.html