Yeah, Benson noted the same about Eclipse -- we had a thread about
this a couple weeks ago. I personally think setting serialVersionUID
is a bad idea, and at least, is exceptional behavior. Unfortunately,
Eclipse defaults to warning about this.

The logic is this: when the JVM deserializes an object it needs to
check for compatibility between the serialized representation and its
current version of the class. It does so once, based on the
non-transient instance fields in the class. If it finds what it thinks
is a mismatch, it will throw an exception.

That is, by default, the deserialization is conservative: it will
never allow deserialization where an incompatibility exists, but will
sometimes disallow a serialization where, actually, there isn't a
compatibility problem.

That is, maybe you added a new instance field, but, you still think
it's valid to deserialize old versions of the object without that
field (maybe you are fine with leaving the new instance field as
null). To overcome this, you can keep track of what's compatible
yourself by setting serialVersionUID. As long as the old/new IDs
match, Java will try to proceed with the deserialization.

There is a use case for this, but, it's quite rare. If you never use
incompatbile versions of your classes in one context, it's not an
issue -- and indeed, that's not exactly a great idea. There is no
performance implication.

The problem is, by setting this field, you're leaving yourself quite
open to the opposite problem: adding a change that really isn't
backwards-compatible, and forgetting to update the ID. This is a big
issue.


Hence, I think it is almost never right to set serialVersionUID, and
certainly not a default. What do you all think of the logic? I think
Benson was on board with it. Now as to how to shut up Eclipse...




On Wed, Jun 17, 2009 at 4:20 PM, Jeff Eastman<[email protected]> wrote:
> Hi Sean,
>
> What's the logic for removing these? They now give me a warning in Eclipse.
> I'm willing to turn that off but I'd like to understand why.
>
> Jeff
>
>
> [email protected] wrote:
>>
>> Author: srowen
>> Date: Wed Jun 17 10:25:43 2009
>> New Revision: 785542
>>
>> URL: http://svn.apache.org/viewvc?rev=785542&view=rev
>> Log:
>> Remove serialVersionUID per our standards (right?)
>>
>> Modified:
>>
>>  lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/CardinalityException.java
>>
>>  lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/IndexException.java
>>
>>  lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/UnboundLabelException.java
>>
>> Modified:
>> lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/CardinalityException.java
>> URL:
>> http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/CardinalityException.java?rev=785542&r1=785541&r2=785542&view=diff
>>
>> ==============================================================================
>> ---
>> lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/CardinalityException.java
>> (original)
>> +++
>> lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/CardinalityException.java
>> Wed Jun 17 10:25:43 2009
>> @@ -22,9 +22,4 @@
>>  */
>>  public class CardinalityException extends RuntimeException {
>>  -  /**
>> -   * -   */
>> -  private static final long serialVersionUID = 1L;
>> -
>>  }
>>
>> Modified:
>> lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/IndexException.java
>> URL:
>> http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/IndexException.java?rev=785542&r1=785541&r2=785542&view=diff
>>
>> ==============================================================================
>> ---
>> lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/IndexException.java
>> (original)
>> +++
>> lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/IndexException.java
>> Wed Jun 17 10:25:43 2009
>> @@ -22,9 +22,4 @@
>>  */
>>  public class IndexException extends RuntimeException {
>>  -  /**
>> -   * -   */
>> -  private static final long serialVersionUID = 1L;
>> -
>>  }
>>
>> Modified:
>> lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/UnboundLabelException.java
>> URL:
>> http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/UnboundLabelException.java?rev=785542&r1=785541&r2=785542&view=diff
>>
>> ==============================================================================
>> ---
>> lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/UnboundLabelException.java
>> (original)
>> +++
>> lucene/mahout/trunk/core/src/main/java/org/apache/mahout/matrix/UnboundLabelException.java
>> Wed Jun 17 10:25:43 2009
>> @@ -22,9 +22,4 @@
>>  */
>>  public class UnboundLabelException extends RuntimeException {
>>  -  /**
>> -   * -   */
>> -  private static final long serialVersionUID = 1L;
>> -
>>  }
>>
>>
>>
>>
>>
>
>

Reply via email to