如何使一个包含“Object”字段的类可序列化

4
public class A implements Serializable
{
    private static final long serialVersionUID = 1L;
    private Object value;
    private Type type;
....
}

它包括了一个不可序列化的"Object",因此类A将被视为不可序列化。

"Object value"可以是Integer、String等,这取决于"Type type"。

如何使A可序列化?提前感谢您的回答!

编辑: 如果使用"private transient Object value","Object value"会丢失吗(在反序列化时)?我不想失去它。

是否存在一般的可序列化对象类型?


Java有一个特定的关键字,用于此目的,即transient。 - takendarkk
3个回答

5

"Object value"可以是整数,字符串等...

整数和字符串都是可序列化的。它们可以正常工作,你不需要特别处理来进行序列化。

是否存在通用的可序列化对象类型?

是的,Serializable:

private Serializable value;

@user2179277 然后你试图序列化一些不是整数或字符串的东西。但整数和字符串都是可序列化的。 - Boann
@user2179277 你可能是在混淆 intInteger 吗?前者是原始类型,后者是一个类。 - takendarkk
@Takendarkk,如果你将一个int赋值给一个Object变量,它就会变成一个Integer,因此这不可能是“不可序列化”问题的原因。 - Boann
我知道自动装箱的存在。我只是不确定原帖作者是否运行了他所展示的“确切”代码。 - takendarkk
@Takendarkk "我知道自动装箱的问题。"那你为什么还要问这个问题呢?如果将它们中的任何一个分配给对象变量,结果都是完全相同的,那么你如何想象OP可能会因混淆它们而出错呢? - Boann
显示剩余2条评论

2

transient关键字用于服务该目的

private transient Object value;

如果对象不代表您的实例,另一种方法是将该对象设为静态。静态变量隐式地是transient

如果使用"private transient Object value",在反序列化时对象值会丢失吗?我不想丢失它。

如果您不对变量进行序列化,则其值将会丢失。序列化保存类的实例状态。当实例进行反序列化时,它将具有Object值,但它将被初始化为默认值,即null。因此,是的,值会丢失,这也是使变量transient的目的。


1
你可以使用transient关键字来跳过字段的序列化:
private transient Object value;

谢谢Juvanis。如果使用“private transient Object value”,“Object value”会在反序列化时丢失吗?我不想失去它。 - user2179277
@user2179277:一个不允许进行对象序列化的变量,因此在反序列化后,该值的状态将始终被重置为默认值。例如,变量x的值设置为9,其默认值为'0',当对象已经序列化并具有x的值9时,在反序列化后将被重置为'0'。 - Sajad Karuthedath

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接