确定什么是瞬态试验和错误?

时间:2014-01-05 21:03:43

标签: java serialization transient

假设我创建了一个类Foo,其实例变量是不同类的实例。例如:

class Foo implements Serializable {
   BarA barA;
   BarB barB;
   .
   .
   BarZ barZ;
}

据我所知,当我序列化时,我需要将所有Bar都序列化,否则我需要将它们标记为瞬态。 但是如何知道哪一个应该标记为瞬态?这是跟踪和错误吗?

3 个答案:

答案 0 :(得分:3)

  

据我所知,当我序列化时,我需要将所有Bar都序列化,否则我需要将它们标记为瞬态。

您的理解不正确。

将字段标记为瞬态会导致在序列化对象时不存储该字段。因此,您应该仅对其值基本上不可能序列化的字段(例如,网络连接),或者可以在以后丢弃和重新创建其值的字段(例如,缓存或对应用程序全局的引用)执行此操作。否则,此对象的序列化表示将不完整。

虽然通常情况下非序列化对象将与瞬态字段相关联,但并非总是如此。了解“瞬态”意味着什么之前,你只是为了让你的代码运行而抛出它!

答案 1 :(得分:1)

您应该确保决定Foo对象状态的所有字段都是可序列化的,其余字段可以是瞬态的。

没有人可以回答哪些字段属于哪个类别,但您是开发人员。

答案 2 :(得分:0)

即使您使用的是没有源代码和混淆的外部库,您也可以编写使用反射的代码,告诉您它或其父类和接口之一是否实现了Serializeable。 因此,不存在设计代码并且不知道您正在使用什么的情况。