| Author |
Getting transient variable values while deserializing
|
Dinakar Kas
Ranch Hand
Joined: Jul 11, 2010
Posts: 34
|
|
Hi all,
I have the following code:
It works fine.
Now, I made Employee as Singleton, and serializing and deserializing it.
When I made Employee as Singleton, while de-serialization, I was able to print the department name which is a transient variable(dept in Employee).
Am I going wrong anywhere?
Thanks
Dinakar
|
 |
Christophe Verré
Sheriff
Joined: Nov 24, 2005
Posts: 14672
|
|
Transient variables are not initialized after unmarshalling.
EDIT: I mean if you use a singleton. Transient variables would be implicitly initialized to their default values if a new instance was created.
|
[My Blog]
All roads lead to JavaRanch
|
 |
Dinakar Kas
Ranch Hand
Joined: Jul 11, 2010
Posts: 34
|
|
Transient variables would be implicitly initialized to their default values if a new instance was created.
But, I am not creating any new Employee object here. I am only unmarshalling it.
Also, even if I create a new Object(Employee here), as I did not specify any default value in it, it should still return null.
so where can be the problem?
Thanks,
Dinakar
|
 |
Rob Spoor
Sheriff
Joined: Oct 27, 2005
Posts: 19216
|
|
|
One hint: return getInstance() from readResolve(), not emp. What if emp is still null?
|
SCJP 1.4 - SCJP 6 - SCWCD 5
How To Ask Questions How To Answer Questions
|
 |
Dinakar Kas
Ranch Hand
Joined: Jul 11, 2010
Posts: 34
|
|
return getInstance() from readResolve(), not emp. What if emp is still null?
Done it. Still Nope.
|
 |
Rob Spoor
Sheriff
Joined: Oct 27, 2005
Posts: 19216
|
|
I didn't say it would solve this issue. It's just very important because it will solve future errors.
readResolve means that the de-serialization process will not return the serialized object but the object returned by the method. This means that the non-serialized singleton instance will be returned, which still has its department set.
|
 |
 |
|
|
subject: Getting transient variable values while deserializing
|
|
|