使用 Transient 变量,我们可以停止序列化所需的值,但在反序列化后,我们将获得瞬态变量的默认值,并且我们将丢失原始值。那么创建瞬态变量的需求是什么,我们可以跳过创建变量本身。如果可能的话,如何获得瞬态变量的原始值。
答案 0 :(得分:1)
瞬态变量的概念是,以序列化形式保持其原始值没有意义,因为在反序列化之后它不会处于有效状态(例如,想想,关于保持开放Socket
)的成员变量。
在对象的反序列化之后,瞬态变量应该通过某种方法调用来初始化(例如,如果该成员的getter为null,则该成员的getter可以初始化它)。
答案 1 :(得分:1)
至于的解释为什么有一个瞬态关键字? /瞬态变量有什么用?我想指出这个问题: Why does Java have transient fields?
它巧妙地解释了瞬态变量用于i.a.出于性能原因,比如预先计算来自存储在对象中的其他值的组合的某些值。您需要在代码中使用它们,但是当对象被序列化并在某处发送/存储时,它们只会占用宝贵的空间 如Eran所述,另一种用途是将变量存储在对象中,这些变量对于它的功能是必要的,但同时又取决于底层系统。
至于如何获得瞬态变量的原始值?,没有干净的方法可以做到这一点。特别是如果您在两个应用程序之间进行序列化和对象传输,则无法简单地数据。
答案 2 :(得分:0)
考虑非常基本的情景Person
类
class Person {
私人姓名
私人DOB
私人时代}
在此,存储名称和DOB是有意义的,但存储Age
并不是因为它总是每天都在变化,所以将其声明为transient
并且可以始终计算为Current date - DOB
,这将给出准确的年龄。
答案 3 :(得分:0)
首先,transient
关键字与实例变量一起使用,以将它们从序列化过程中排除。如果某个字段是暂时的,则其值不会被保留。
在Hibernate中可以看到Transient变量的完美使用。
对于数据库表中的示例,只有两列(name and surname)
但是在你的POJO实体中,你有三个变量(name , surname and age)
,在这种情况下,你可以使Transient到age字段,你可以保存你的实体而不会抱怨,因为年龄变量变得不会持续存在。