私のJavaソースコードの1つの方法では、同じコードブロックが何度も発生します。
<some code>
<some code>
<block of code>
<some code>
<block of code>
<some code>
<some code>
<some code>
<block of code>
<some code>
<some code>
<block of code>
<some code>
etc..
このコードブロックが行うことは、オブジェクトのどのプロパティが従うべきコードのターゲットであるべきかを見つけることです。より具体的には、ブロックの先頭に文字列「Object.property」があり、コードのタスクはそれを解析して、オブジェクト「Object」のタイプと「Object」のプロパティを見つけることです。 「プロパティ」です。それが行われ、ブロックが終了すると、実行は、オブジェクトのプロパティを使用して何かを実行し続けます。プロパティを比較に使用することも、何かを割り当てることもできます。
さて、私の問題は、このブロックを別のメソッド内に配置してコードを少し整理したいということです。その後、代わりに複数回呼び出すことができます。さらに、このブロックにバグが見つかった場合、それを修正するためにすべての発生を確認する必要はありません。1つの方法だけです。
だからこれは基本的に私がやりたいことです:
<some code>
<some code>
property = parse();
<some code>
property = parse();
<some code>
<some code>
<some code>
property = parse();
<some code>
<some code>
property = parse();
<some code>
etc..
property parse(){
<block of code>
return property;
}
さて、Javaにはポインタがないため、たとえば、この新しいメソッドから整数であるプロパティを返すことはできません。その整数のコピーが返され(値渡し)、残りのすべてのコードは、プロパティ自体ではなく、プロパティのローカル整数コピーを処理します。もちろん、プロパティが比較でのみ使用される場合はこれで問題ありませんが、コードの残りの部分で何かを割り当てたい場合は、機能しなくなります。
Javaコードを短縮できるように、スマートでシンプルな回避策はありますか?それを変更するときは、コードの一部を変更するだけで済みますか?
編集:
実際のコードを提供するために、toParseという名前の文字列を取得した後、別のメソッドに配置されていない場合、コードのブロックは次のようになります(この例では「niceShirt.size」のようになります)。
String[] parts = toParse.split('\\.');
if(pantsList.containsKey(parts[0])){
if(parts[1] == "size") pantsList.get(parts[0]).size += 1;
if(parts[1] == "daysWorn") pantsList.get(parts[0]).daysWorn += 1;
}
if(shirtsList.containsKey(parts[0])){
if(parts[1] == "size") shirtsList.get(parts[0]).size += 1;
if(parts[1] == "daysWorn") shirtsList.get(parts[0]).daysWorn += 1;
}
if(shoesList.containsKey(parts[0])){
if(parts[1] == "size") shoesList.get(parts[0]).size += 1;
if(parts[1] == "daysWorn") shoesList.get(parts[0]).daysWorn += 1;
}
このようなコードは何度も発生するので、次のようなメソッドが必要です。
String[] parts = toParse.split('\\.');
if(pantsList.containsKey(parts[0])){
if(parts[1] == "size") return pantsList.get(parts[0]).size;
if(parts[1] == "daysWorn") return pantsList.get(parts[0]).daysWorn;
}
if(shirtsList.containsKey(parts[0])){
if(parts[1] == "size") return shirtsList.get(parts[0]).size;
if(parts[1] == "daysWorn") return shirtsList.get(parts[0]).daysWorn;
}
if(shoesList.containsKey(parts[0])){
if(parts[1] == "size") return shoesList.get(parts[0]).size;
if(parts[1] == "daysWorn") return shoesList.get(parts[0]).daysWorn;
}
残りのコードで行う必要があるのは、次のとおりです。
parse(toParse) += 1;
..しかし、parse(toParse)はコピーであり、値による戻りであるため、これは機能しません。したがって、オブジェクトの実際のプロパティには何もしません。
これが問題の明確化に役立つことを願っていますか?