[kaffe] java.io.ObjectInputStream: final field cannot be restored

Guilhem Lavaux guilhem.lavaux@free.fr
Wed Mar 24 03:34:02 2004


Guilhem Lavaux wrote:
> Ito Kazumitsu wrote:
> 
>> Hi,
> 
> 
> Hi Ito !
> 
>>
>> Interested in Prevayler (http://www.prevayler.org/), which is
>> marked untested in our "Compatibility - Application Testing",
>> I tried it.
>>
>> The result was unsatisfactory.  The simplest demo of Prevayler
>> cannot run on kaffe.  After studying the cause of the error,
>> I found something buggy in java.io.ObjectInputStream.
>>
>> My test program is attaced below.  The test shows that a
>> field that is marked "final" cannot be restored by
>> java.io.ObjectInputStream#readObject.
>>
> 
> This is linked to ObjectStreamField.java:67
> 
> toset = !Modifier.isFinal(field.getModifiers());
> 
> I guess it was placed there for a good reason but I don't remember which 
> one. We have to check in the spec again.
> 

The reason was quite evident... you can't set a final variable. It's 
rather someone sets (or doesn't set) A to the right value when it is 
initializing a new instance using readObject().

Cheers,

Guilhem.