java构造器如何重载_在Java中构造器重载 – 最佳实践

虽然没有“官方指导方针”,但我遵循KISS和DRY的原则。 使重载的构造函数尽可能简单,最简单的方法是只调用这个(…)。 这样你只需要检查和处理一次参数。

public class Simple { public Simple() { this(null); } public Simple(Resource r) { this(r, null); } public Simple(Resource r1, Resource r2) { // Guard statements, initialize resources or throw exceptions if // the resources are wrong if (r1 == null) { r1 = new Resource(); } if (r2 == null) { r2 = new Resource(); } // do whatever with resources } }

从unit testing的angular度来看,可以很容易地testing这个类,因为你可以把资源放入其中。 如果这个class有很多资源(或者一些OO-geeks称之为合作者),请考虑以下两点之一:

做一个参数类

public class SimpleParams { Resource r1; Resource r2; // Imagine there are setters and getters here but I'm too lazy // to write it out. you can make it the parameter class // "immutable" if you don't have setters and only set the // resources through the SimpleParams constructor }

Simple中的构造函数只需要拆分SimpleParams参数:

public Simple(SimpleParams params) { this(params.getR1(), params.getR2()); }

…或者使SimpleParams成为一个属性:

public Simple(Resource r1, Resource r2) { this(new SimpleParams(r1, r2)); } public Simple(SimpleParams params) { this.params = params; }

做一个工厂类

做一个工厂类为你初始化资源,如果初始化资源有点困难,

public interface ResourceFactory { public Resource createR1(); public Resource createR2(); }

然后以与参数类相同的方式完成构造函数:

public Simple(ResourceFactory factory) { this(factory.createR1(), factory.createR2()); }

把两者结合起来

是的,你可以根据当时对你来说比较容易的方式来混搭两种方式。 参数类和简单的工厂类几乎是相同的事情考虑Simple类,他们使用相同的方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值