这里通常的答案是创建一个具有这些属性的新类,并传递该类的一个实例(有点像消息信封)而不是一堆离散的参数。
例如:
public void create(MyNiftyThing thing){
object.create(thing);
}
...MyNiftyThing
班级在哪里:
class MyNiftyThing {
private String x;
private String y;
private String z;
private Calendar a;
private Calendar b;
private Calendar c;
private List<String> d;
public MyNiftyThing(String x, String y, String z, Calendar a, Calendar b, Calendar c, List<String> d) {
// ...init data members here...
}
// ...accessors for the data members here...
}
你可以通过只拥有 getter 而不是 setter 来保持它不可变。有时,如果它纯粹是一种方便的数据结构,您可能会为实例成员使用公共,但任何体面的 IDE 都可以为您自动生成访问器(如果您使用公共,您会final
因为不变性而陷入困境)。
当然,您不必接受构造函数中的所有这些(或者您可以有多个构造函数),如果您可以提供合理的默认值。
它可能不适用于这种特定情况,但例如MyNiftyThing
可以是它自己的构建器,方法是让构造函数接受最少的 args(可能没有),然后是一系列buildNNN
设置其相关数据成员并返回this
链接的方法。这可以帮助避免迷失在构造函数签名中(“Was it x
, y
, z
or x
, z
, y
...?”)。:-) 这样做的缺点是你基本上失去了不变性。