HUWWW
虽然没有“官方指南”,但我遵循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-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到它们以相同的方式使用它们。