public class Foo implements java.io.Serializable {
private int v1;
private static double v2;
private Loan v3 = new Loan();
}
选项:
A.因为Foo实现了Serializable,所以可以序列化Foo的实例。
B. Foo的实例无法序列化,因为Foo包含不可序列化的实例变量v3。
C.如果将v3标记为瞬态,则Foo的实例是可序列化的。
D.b和c
答案:D
说明:即使对象的类实现了java.io.Serializable
,也可能无法序列化,因为它可能包含不可序列化的实例变量。
现在我的问题是:
据我所知,transient
用于关闭序列化。那么在这种情况下瞬态如何帮助我们序列化foo?
transient
不会完全禁用序列化;它只是标记不会序列化的成员。通常用于未序列化对象时不正确或无关紧要的东西,或存储起来不太安全的东西(密码,解密的数据之类的东西),或可能导致无法序列化的东西。容易重建。
在这种情况下,我假设Loan
该类不可序列化。(如果是,那么A将是正确的。)将标记v3
为“
transient”只是告诉Java不必担心该字段,而是继续对其他字段进行序列化。这意味着未序列化的Foo
可能为null
v3
。如果您还想存储Loan
,则需要跟踪足够的信息以随意重新创建它,或者更改类Loan
以使其也实现java.io.Serializable
。
另外,如果需要控制序列化,则可以使用一些方法(writeObject
,readObject
)来实现。但这可能有点麻烦。
我的RESTendpoint返回包含对象字段的响应对象。序列化一切正常,但当我开始为此API编写客户端时,我遇到了反序列化问题。我根据一些关于使用Jackson进行多态序列化的问题/文章制作了这个示例代码。它演示了这个问题。 我的期望(以及我对列表的期望 我现在拥有的Object: 但我需要反序列化除动物列表之外的其他类型的对象。救命啊!
是否有方法序列化类的瞬态字段?文档中提到默认情况下不支持它,但是否有办法打开它? 非常感谢
问题内容: 我们将JSON序列化与Jackson结合使用,以公开系统的内部状态以调试属性。 默认情况下,杰克逊不会序列化瞬态字段-但我也希望对其进行序列化。如何序列化这些字段? 我知道的一种方法是为这些字段提供getter-但我不想这样做,因为我有一些我不想被调用的getX方法(例如,有些getter会更改对象状态)。 我知道我可以创建一个注释,但是我真的想避免使用它。 所以我的问题是:有没有一种
问题内容: 在Java中进行序列化后,是否可以将字段设置为任何非默认值?我的用例是一个缓存变量- 这就是为什么。我也有一个习惯,即不要更改字段(即,地图的内容已更改,但对象本身保持不变)。但是,这些属性似乎是矛盾的- 尽管编译器允许这样的组合,但除反序列化之后,我无法将字段设置为任何值。 我尝试了以下操作,但没有成功: 简单的字段初始化(如示例所示):这是我通常所做的,但是在未序列化之后似乎没有发
问题内容: 我需要将一些对象序列化为JSON并发送到WebService。如何使用org.json库?否则我将不得不使用另一个?这是我需要序列化的类: 我只放了类的变量和构造函数,但也有getter和setter方法。所以如果有人可以帮忙 问题答案: 没有注释的简单方法是使用Gson库 就那么简单:
考虑以下代码: 现在扩展了一个实现接口的类。类和是带有一堆getter和setter的POJOS。FindBugs抱怨和字段说: 这个Serializable类定义了一个非基元实例字段,它既不是瞬态的、Serializable的,也不java.lang.Object的,并且似乎没有实现Externalizable接口或readObject()和WriteObject()方法。 好吧,所以一切都很好