Java 确定什么是暂时的是一种尝试和错误吗?

Java 确定什么是暂时的是一种尝试和错误吗?,java,serialization,transient,Java,Serialization,Transient,假设我创建了一个类Foo,它的实例变量是不同类的实例。例如: class Foo implements Serializable { BarA barA; BarB barB; . . BarZ barZ; } 我知道当我序列化时,我需要将所有的条都序列化,否则我需要将它们标记为瞬态。 但是,如何知道哪一个应该被标记为瞬态呢?这是跟踪和错误吗?您应该确保决定Foo对象状态的所有字段都是可序列化的,其余字段可以是暂时的 没有人能回答哪些字段属于哪个类别,但你,开发人

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

class Foo implements Serializable {
   BarA barA;
   BarB barB;
   .
   .
   BarZ barZ;
}
我知道当我序列化时,我需要将所有的条都序列化,否则我需要将它们标记为瞬态。
但是,如何知道哪一个应该被标记为瞬态呢?这是跟踪和错误吗?

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


没有人能回答哪些字段属于哪个类别,但你,开发人员。

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

没有人能回答哪些字段属于哪个类别,但你,开发人员

我知道当我序列化时,我需要将所有的条都序列化,否则我需要将它们标记为瞬态

你的理解是错误的

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

虽然通常情况下,不可序列化对象将与瞬态字段关联,但情况并非总是如此。在你为了让你的代码运行而到处乱扔它之前,要理解“瞬态”是什么意思

我知道当我序列化时,我需要将所有的条都序列化,否则我需要将它们标记为瞬态

你的理解是错误的

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


虽然通常情况下,不可序列化对象将与瞬态字段关联,但情况并非总是如此。在你为了让你的代码运行而到处乱扔它之前,要理解“瞬态”是什么意思

即使您使用的外部库没有源代码和模糊处理,您也可以编写代码,使用反射将告诉您它或其父类和接口之一是否实现了可序列化。
因此,不可能出现这样的情况:您设计代码时不知道自己在使用什么。

即使您使用的外部库没有源代码和混淆,您也可以编写代码,使用反射将告诉您它或其父类和接口之一是否实现了可序列化。
因此,不可能存在这样一种情况:你设计代码却不知道自己在使用什么。

你是开发人员,你不知道吗?哈哈,
反复试验。
永远都不应该是正确的方法来确定如何声明东西。不,这不是反复试验,而是软件设计。选项不仅仅是“使
barA
serializable”或“将
barA
标记为transient”。还有“不要使
Foo
serializable”“--这并不总是一个坏的选择:P你是开发人员,你不知道吗?哈哈,
尝试和错误。
永远不应该是正确的方式来确定如何声明事物。不,这不是尝试和错误,而是软件设计。选项不仅仅是“使
barA
可序列化”或“将
barA
标记为瞬态”。还有“不要使
Foo
serializable”(不要使
Foo可序列化)——这并不总是一个坏选项PErr,execute,not compile。Err,execute,not compile。您不需要编写代码。javap工具会告诉你这一点,你不需要编写代码。javap工具将告诉您这一点。