将基础对象转换为扩展基础对象的对象

时间:2013-06-13 13:04:26

标签: java

我有一个具有非唯一名称的自动生成的类。由于无法更改此类或生成类的文件,我将其放入自己的包中。这导致需要在我需要声明或关闭此对象时随时键入整个包。

我的解决方案是创建一个子类,如下所示

public UniqueName extends BaseClass
{
   // This class is empty and intended to be used as an alias. 
}

不幸的是,我遇到了另一个问题,其中序列化和反序列化只能在基类上完成。

我想知道的是,是否有办法将该基类转换为扩展它的别名类?我已经尝试将基类转换为别名类但我从eclipse收到了几个错误。

1 个答案:

答案 0 :(得分:0)

我理解,由于某种原因,BaseClass是不可修改的,并且您希望最终得到一个更“有用”的BaseClass版本。

不是扩展BaseClass,而是在UniqueName上委托给它:

public BaseClass{
    public void usefulMethod() { ... }

    public void lessUsefulMethod() { ... }
}

public UniqueName 
{
    private BaseClass baseClass;

    public UniqueName(BaseClass baseClass){ this.baseClass = baseClass; } 

    public void usefulMethod() { return baseClass.usefulMethod(); }

    public void moreUsefulMethod(){
       ...
       baseClass.lessUsefulMethod();
       ... 
    }
}

不是从BaseClass到UniqueName的类型转换,而是使用以BaseClass作为参数的构造函数创建UniqueName的实例。

如果你需要保持UniqueName与BaseClass的“is-a”关系,你可以这样做。但是不要忘记覆盖每个方法并将其委托给baseClass实例。

P.S。:如果您在序列化/反序列化中遇到对象替换问题,则ObjectInputStream和ObjectOutputStream类具有replaceObject和resolveObject方法,这允许我们替换序列化中的对象类型。