假设我创建了一个类Foo,其实例变量是不同类的实例。例如:
class Foo implements Serializable {
BarA barA;
BarB barB;
.
.
BarZ barZ;
}
据我所知,当我序列化时,我需要将所有Bar都序列化,否则我需要将它们标记为瞬态。 但是如何知道哪一个应该标记为瞬态?这是跟踪和错误吗?
答案 0 :(得分:3)
据我所知,当我序列化时,我需要将所有Bar都序列化,否则我需要将它们标记为瞬态。
您的理解不正确。
将字段标记为瞬态会导致在序列化对象时不存储该字段。因此,您应该仅对其值基本上不可能序列化的字段(例如,网络连接),或者可以在以后丢弃和重新创建其值的字段(例如,缓存或对应用程序全局的引用)执行此操作。否则,此对象的序列化表示将不完整。
虽然通常情况下非序列化对象将与瞬态字段相关联,但并非总是如此。了解“瞬态”意味着什么之前,你只是为了让你的代码运行而抛出它!
答案 1 :(得分:1)
您应该确保决定Foo
对象状态的所有字段都是可序列化的,其余字段可以是瞬态的。
没有人可以回答哪些字段属于哪个类别,但您是开发人员。
答案 2 :(得分:0)
即使您使用的是没有源代码和混淆的外部库,您也可以编写使用反射的代码,告诉您它或其父类和接口之一是否实现了Serializeable。 因此,不存在设计代码并且不知道您正在使用什么的情况。