の一部を理解しようとしています。ITEM 40:設計メソッドのシグニチャをEffective Java 2nd Editionから慎重に理解してください。メソッド呼び出しのBuilderパターンを変更する
メソッド署名の可読性を向上させるために提案されていることの1つは、4つ以下のパラメータを目指すことです。より長いパラメータリストは以下の通りであるそのうちの一つの様々な技術を使用して管理することが示唆されている:
最初の二つの側面を組み合わせた第3の技術から ビルダパターン(項目2)を適応させることですオブジェクトの構築からメソッド の呼び出し。 のうちのいくつかがオプションである場合は、特に、すべてのパラメータを表すオブジェクト を定義し、クライアントがこのオブジェクトに対して複数の「セッター」呼び出しを行うようにすると便利ですそれぞれは単一の パラメータまたは小さな関連グループを設定します。目的のパラメータに が設定されると、クライアントはオブジェクトの "execute"メソッドを呼び出します。これは のパラメータの最終的な有効性チェックを行い、実際の の計算を実行します。
オブジェクトの作成に使用されている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();
}
}
は正しいジョシュアブロッホのアドバイスの私の解釈ですか?
ああ私はそれを行うことを意味しましたが、それは私の心を滑りました。私はjavaのためにjsfiddleのようなものを探したい。 –
完了。ありがとう! –
私は、ビルダービルダー=新しいMoveBuilder()。x(123).y(456).time(789)のようなものを書くことを考えていると思います。 yourObject.execute(builder); ' – assylias