这是试图理解第 40 项的一部分:从 Effective Java 2nd Edition仔细设计方法签名。
提高方法签名可读性的建议之一是针对四个或更少的参数。建议使用多种技术管理较长的参数列表,其中一种技术如下:
第三种结合前两种技术的技术是将 Builder 模式(第 2 项)从对象构造调整到方法调用。如果您有一个带有许多参数的方法,特别是如果其中一些参数是可选的,那么定义一个表示所有参数的对象并允许客户端对该对象进行多次“setter”调用会很有好处,每个它设置一个参数或一个小的相关组。一旦设置了所需的参数,客户端就会调用对象的“执行”方法,该方法对参数进行任何最终有效性检查并执行实际计算。
我熟悉 Builder 模式,因为它用于对象构造,但不确定我是否正确理解如何使其适应方法调用。
到目前为止,这是我所拥有的:(
我试图改进该方法的方法调用move
)
public class Space {
public static class Builder {
// Required parameters
private final int x;
private final int y;
private final int z;
// optional params
private long time = 0;
public Builder(int x, int y, int z) {
this.x = x;
this.y = y;
this.z = z;
}
public Builder time(long val) {
time = val;
return this;
}
public void move() {
if (x == 0 || y == 0 || z == 0) {
throw new IllegalArgumentException("Cannot move to the centre of the universe");
}
// Do the actual work here
}
}
// public void move(int x, int y, int z, long time) {
// // Do the work here
// }
public static void main(String[] args) {
new Builder(1, 1, -1).time(1234).move();
}
}
我对 Joshua Bloch 建议的解释是否正确?