请问你们一般在action类里加不加这句话?private static final long serialVersionUID = 1L
问题1:不加这句话报警告,加了就不报?
问题2:不加对程序有影响吗?加了又有什么作用?
问题3:还有些人加private static final long serialVersionUID = -2231556599205500951L;又有什么作用?

解决方案 »

  1.   

    说实话没有用过private static final long serialVersionUID,但也不会影响到程序.可以查一下是不是你的项目中其它的地方用到了.
      

  2.   

    这个myEclipse设置可以去掉警告的
    期待人来回答其他的
      

  3.   

    你可以通过eclipse的设置来去掉这个警告,一般来说,不加的话不会影响功能的。
    如果加的话,建议你按照问题3提到的那种方式加。通过eclipse的自动排除错误/警告的功能。
      

  4.   

    不用加,不需要。这一般是eclipse的提示,实际上没啥子用
      

  5.   

    加这个是为了序列化,主要用于将这个对象写到硬盘、网络中,然后在其它服务器或者稍后的时间中从硬盘、网络中恢复这个对象。
    一般我都修改Eclipse,禁止这个警告。不然太多类都加,并且它们不可能需要序列化的
      

  6.   

    首先,这个和action不action的没有任何关系。serialVersionUID 和序列化有关。序列化,简单说就是把当前对象的状态,以字节的形式保存下来(序列化),换个时间或者换个地方使用(反序列化),类似游戏存档,或者office文件。而serialVersionUID的作用就是标识这个存档对应的类的版本号,好比对应的office的版本。
    假设public class A implements Serializable {
      int x; int y; int z; 
      private static final long serialVersionUID = 123456;
    }如果你序列化的时候,会把123456存入序列化的字节。当你拿出来用的时候,可能已经是两个月以后了,
    这个时候,class A已经修改为:public class A implements Serializable {
      int[] data;
      private static final long serialVersionUID = 888888;
    }已经和原来的版本完全不兼容,这个时候serialVersionUID就起作用了。当然,如果只是小的修改,完全不影响类的工作,serialVersionUID 可以不变。
    至于那个“随机数”,其实是eclipse调用了jdk\bin\serialver.exe,对编译好的类进行摘要处理,任何改动,都会导致这个结果变化,无论改动是否影响序列化。
      

  7.   

    如果楼主做过RMI的话一定懂序列化在rmi中,服务端方法的参数,返回值如果是对象类型,都要序列化成流才能在网络上传输到达客户端后,客户端对这些收到的流数据进行反序列化成对象如果客户端的代码没改,服务端的某个序列化类添加了一个字段的话,若没有相同的serialVersionUID ,客户端将无法反序列化,如果两遍serialVersionUID 相同,则客户端可以根据一定规则将流反序列化实际上,如果不写serialVersionUID ,在序列化的时候,也会自动生成一个serialVersionUID ,那么服务端与客户端可能就不一致了,就导致不能序列化的问题