パラメータ化するかしないかが問題です...
...オブジェクトの状態に依存せずに入力を受け取り、出力を返す関数の場合:したがって、パラメーターを受け取り、魔法を実行して値を返すメソッドが必要です...真の関数- -パラメータを使用する必要があります。あなたの方法はブラックボックスです。Javaはstatic
そのようなメソッドのキーワードを提供し、パラメーターのみに依存するタスクには静的メソッドを使用する必要があります。これらのケースには、パラメーター化されたメソッドが必要です。例:
public static String encodeString(String input, String format)
...オブジェクトの状態を処理し、値を返す関数の場合:メソッドのようにhashcode
。引数を渡してはいけません...メソッドはインスタンスメソッドである必要があります...魔法を実行するためにインスタンスフィールドを使用する必要があります。これは例です:
public String toString(){
return this.attr1 +", " + this.attr2; //<-- see I haven't passed attr1, attr2
}
...一部の外部入力が必要で、一部の状態属性も必要な場合:外部入力に基づいて状態オブジェクトを操作して結果を返すメソッドがある場合など。外部で必要なパラメータのみを渡します。例えば:
public String toFormat(String format){
if("json".equals(format) //<-- this is external agent.
return new JSONObject(this).toString();
else
return this.attr1 +", " + this.attr2; //<-- see I haven't passed attr1, attr2
}
だから、それはあなたがしていることに依存しています。
編集1:(コメントへの回答)
に来ますWhy?
冗長性を最小限に抑えることです。これが、上記のポイントを経験則としてとらえるべき理由ですdo not create unnecessary objects; do not bloat the parameter list
。
どのシナリオでのグッドプラクティスは何かについて述べました。あなたは自分の状況に重みを付け、何を使うかを決めます。したがって、メソッドがある場合は、
int add(int a, int b){returns a+b;}
aとbを渡し、このメソッドを静的なものとして使用することをお勧めします。しかし、どこでやっnew Additor(a, b).add();
て
public int add(){return this.a + this.b;}
あまり良い考えではありません。