java 初始化基类_java – 在派生类构造函数(或工厂)中初始化基类的模式

想象一下,你有一个派生类,其中基类是你无法修改的.基类有很多状态(许多非常量私有成员)和许多构造函数,具有不同数量的参数来初始化状态的某个子集(当然,子集的大小因构造函数而异).

现在我的派生类是基类的一个非常轻量级的包装器.让我们假设它没有添加自己的状态,只是略微修改了几个方法的行为(可能围绕super.originalMethod()调用进行一些额外的记录).

我遇到的问题是我想要获取基类的对象,并创建它的“副本”,具有相同的状态,但作为我的派生类的实例.

这证明是困难的.我不能调用基类的“最完整”构造函数,通过调用getters从源传递所有状态,因为根据基类的构造方式,这个构造函数可能会拒绝某些状态值.例如,您可以使用0-arg ctor创建默认对象,任何多个值都将为null.但是,在ctor中传递允许您指定这些值的空值是不合法的.

此外,上面的方法很脆弱,因为如果对基类进行修改会增加更多的状态,并且添加“甚至更完整”的构造函数(或者不能在构造函数中设置的状态,只能通过访问器方法),副本将不再完整.

我想要的是`clone(),而是初始化相同类型的新对象,初始化派生类的基类成员.我猜这样的事情不存在.对模式的任何建议可能提供相同的东西?

请记住,我无法修改基类.如果可以的话,这会容易得多.

解决方法:

如果可以覆盖所有公共方法,则可以将源对象另存为委托

Class D extends B

B src;

D(B src){ super(whatever); this.src=src; }

public method1(){ src.method1(); }

标签:java,clone,design-patterns,constructor,factory

来源: https://codeday.me/bug/20190610/1210239.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值