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

}

}

从单元测试的角度来看,测试类将变得容易,因为你可以把资源放入它。如果类有许多资源(或者一些OO-geek调用它的协作者),请考虑以下两种情况之一:

创建一个参数类

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、付费专栏及课程。

余额充值