我有一个具有非唯一名称的自动生成的类。由于无法更改此类或生成类的文件,我将其放入自己的包中。这导致需要在我需要声明或关闭此对象时随时键入整个包。
我的解决方案是创建一个子类,如下所示
public UniqueName extends BaseClass
{
// This class is empty and intended to be used as an alias.
}
不幸的是,我遇到了另一个问题,其中序列化和反序列化只能在基类上完成。
我想知道的是,是否有办法将该基类转换为扩展它的别名类?我已经尝试将基类转换为别名类但我从eclipse收到了几个错误。
答案 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方法,这允许我们替换序列化中的对象类型。