各位大侠来看下代码,不知道小弟写的有没有出错或者不完整的地方,
package com.shop.bean;
import java.io.Serializable;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ReflectionToStringBuilder;public class Base implements Serializable {
private static final long serialVersionUID=7766184319541530720L;
private Integer id;
public  Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public boolean equals(Object obj){
if(this==obj) return true;
if(!(obj instanceof Base))
return false;
Base target=(Base)obj;
if(this.getId()!=null&&this.getId()!=0){
return this.getId().equals(target.getId());
}
if(target.getId()!=null&&this.getId()!=0){
return false;
}
return EqualsBuilder.reflectionEquals(this, obj);

}
public int hashCode(){
if(this.getId()!=null&&this.getId()!=0){
return this.getId().hashCode();
}
return HashCodeBuilder.reflectionHashCode(this);
}
   public String toString(){
   return ReflectionToStringBuilder.toString(this);
   }
}
这是个基类,后面还有bean要继承它,不过我觉得this.getId()!=0好像不需要,因为我已经在数据库里面自动生成Id,而且是从1开始的,还有 serialVersionUID这个属性要怎么设置它的大小才合适。

解决方案 »

  1.   

    this.getId()!=0是可以不要;
    serialVersionUID好像不用管它吧
      

  2.   

    补充一下:
    serialVersionUID 用来表明类的不同版本间的兼容性 简单来说,Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。 当实现java.io.Serializable接口的实体(类)没有显式地定义一个名为serialVersionUID,类型为long的变量时,Java序列化机制会根据编译的class自动生成一个serialVersionUID作序列化版本比较用,这种情况下,只有同一次编译生成的 class才会生成相同的serialVersionUID 。 如果我们不希望通过编译来强制划分软件版本,即实现序列化接口的实体能够兼容先前版本,未作更改的类,就需要显式地定义一个名为serialVersionUID,类型为long的变量,不修改这个变量值的序列化实体都可以相互进行串行化和反串行化。