Hi, all:
我的序列化场景如下, 有一个Job类, 实现IJob接口. 一个Resource类, 实现IResource接口, Resource包含Job的应用. 需要将Resource序列化.Interface IJob extends Serializable{}Class Job implements IJob, Serializable(){}Interface IResource extends Serializable{}Class Resource implements IResource, Serializable(){
    IJob myJob;
}疑问:
1. 接口类的实例化是必要的么? (正确的么?) Interface IJob extends Serializable{}2. 我在实例化一个resource的时候, 是应该
IResource res = new Resource();
还是
Resource res = new Resource(); 
这对序列化有影响么3. 在Class Resource implements IResource, Serializable() 中, 对job的引用, 我是应该用:
IJob myJob;
还是
Job myJob;在我当前的场景中, 每次反序列化resource的时候都回提示:   
java.lang.IllegalArgumentException: java.io.InvalidClassException: packagename.Job; packagename.Job; no valid constructor我在想这是不是因为我在Resource中引用IJob, 而不是Job造成的. 
多谢大家指点!ye

解决方案 »

  1.   

    你用IJob job和Job job都是可以的,如果Job类里面只是完整的实现了IJob(没有定义自己的方法),那么这2种写法都是一样的。第3个问题的产生估计是你定义了一个或者更多的带参数的构造方法,而没有定义缺省参数的构造方法
    public Job(){}
    造成的
      

  2.   

    应该用IJob ,面向接口!
    解决异常试试楼上的方法
      

  3.   

    Class Job implements IJob, Serializable(){} 
    其它的就是楼上各位说的,友情提示下楼主这里不用再实现Serializable
      

  4.   

    1、正确
    2、两者没区别。但推荐使用地一种写法。
    3、和第二个问题类似,推荐接口声明。你报的异常是因为没有为class声明无参构造函数,需要对每个要序例化的对象的class类中增加public ObjectA(){}构造函数(ObjectA是对象名),这是javabean的标准写法。
      

  5.   

    谢谢诸位.
    恩, 我目前定位也是在Job没有无参数的构造函数. 但问题是, Job是扩展另外一个第三方类IntelJob, 而InterJob的源代码里面也没有无参数的构造函数. 这样的我应该怎么处理? (如何给Job加上无参数构造函数?)
      

  6.   

    如果父类InterJob中一些属性必须有值才能初始化的化就在你的public ObjectA(){}里弄一些默认值给父类
    如果不是必须的话可以不理
      

  7.   

    确实是InterJob没有无参数构造函数造成的, 幸好用的是开源软件做底层, 直接修改相关文件扩展Serializable接口, 重新编译了jar包, Done!