gpt4 book ai didi

java - 将字段标记为 transient 如何使序列化对象成为可能

转载 作者:搜寻专家 更新时间:2023-10-30 19:54:47 25 4
gpt4 key购买 nike

public class Foo implements java.io.Serializable {
private int v1;
private static double v2;
private Loan v3 = new Loan();
}

选项:
A. Foo 的实例可以序列化,因为 Foo 实现了 Serializable。
B. 无法序列化 Foo 的实例,因为 Foo 包含一个不可序列化的实例变量 v3。
C. 如果将 v3 标记为 transient ,则 Foo 的实例是可序列化的。
D.b和c

答案:D

说明:一个对象可能不会被序列化,即使它的类实现了 java.io.Serializable,因为它可能包含不可序列化的实例变量。

现在我的问题是:

据我所知,transient 是 used关闭序列化。那么transient在这种情况下是如何帮助我们序列化foo的呢?

最佳答案

transient 不会完全禁用序列化;它只是标记不会被序列化的成员。它通常用于对象未序列化时不正确或不相关的内容,或存储起来不安全的内容(密码、解密数据等),或可能无法序列化的内容很容易重建。

在这种情况下,我假设 Loan 类不可序列化。 (如果是,那么 A 就是正确的。)将 v3 标记为 transient 只是告诉 Java 不要担心那个字段,而是继续序列化其他字段。这意味着未序列化的 Foo 可能有一个空的 v3。如果您还想存储 Loan,您需要跟踪足够的信息以随意重新创建它,或者更改类 Loan 以便它实现 java.io.Serializable 也是。

或者,如果您需要控制序列化,您可以实现一些方法(writeObjectreadObject)。但这可能有点麻烦。

关于java - 将字段标记为 transient 如何使序列化对象成为可能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5177013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com