Java 如何使用'transient'成员?

Java 如何使用'transient'成员?,java,serialization,Java,Serialization,我有一个序列化的类,其中有一些临时的成员。我不知道如何使用这些成员 public class ClientBeanBase extends BeanBase { protected REWSStubClient getServiceStub( boolean initSession ) { REWSStubClient stub = null; stub = (REWSStubClient) sessionVars.get(Constants.SESSI

我有一个
序列化的
类,其中有一些
临时的
成员。我不知道如何使用这些成员

public class ClientBeanBase extends BeanBase 
{

  protected REWSStubClient getServiceStub( boolean initSession ) 
  {     
    REWSStubClient stub = null;

    stub = (REWSStubClient) sessionVars.get(Constants.SESSION_KEY_STUB)             

    ...
}
我的基类是:

public class BeanBase implements Serializable
{
  protected transient Map<String,Object> sessionVars = ...;
  ...
}
公共类BeanBase实现可序列化
{
受保护的瞬态映射sessionVars=。。。;
...
}
我在
getServiceStub
中看到
sessionVars
有时是
null

我不知道什么时候可以在
ClientBeanBase
中使用
sessionVars

您可以随时使用
sessionVars


transient
关键字所做的唯一一件事是告诉JVM在对象序列化的情况下不要序列化该特定字段。换句话说,当重新创建对象时,它将重置为默认值。

您可能已经知道在序列化过程中跳过了瞬态变量。您可以随时引用它,但在使用前需要初始化sessionVars,您可以在构造函数中设置它。

如果您在本地访问实例,我的意思是在没有rmi的同一jvm下,则瞬态变量将显示该值。但是,如果您正在对实例进行编组,那么这些变量将显示为null。

以上问题的答案取决于
sessionVars
为何是瞬态的。您可以在填充后使用它。那么,反序列化后是否有一些事件会填充它?还可以考虑添加自定义反序列化代码,至少创建一个空映射。定义“使用”。这不是一个真正的问题。我如何知道何时重新创建(重置为默认值)以及何时不创建?