そこで、Beanにいくつかのプロパティを設定したいと思います。25個の変数値を設定する必要があります。bean.setProperty()のような25個のsetステートメントを記述できることはわかっています。これを行うためのより効率的またはよりクリーンな方法があるかどうか疑問に思いました!
3 に答える
Eclipseを使用していますか?その場合は、Beanクラスとすべてのクラスメンバーを定義したら、メンバー変数の1つを右クリックし、[ソース]、[ゲッターとセッターの生成...]の順に選択し、[すべて選択]ボタンをクリックして、[OK]をクリックします。これで完了です。
Javaでは、1)変数自体をパブリックにしてから、メソッドによる変更を制限する方法がない、2)保護/プライベートメンバー変数にし、setterメソッドとgetterメソッドによってのみ変更可能にする、または3)プライベートにするという選択肢があります。クラスコンストラクタを介してのみ設定可能です。
プロパティの名前とその名前がセッターと一致することがわかっている場合は、リフレクションを使用できます。
次に例を示します(テストされていません)。
public String getSetterName(String property) {
StringBuilder methodName = new StringBuilder();
Character firstCharacter = Character.toUpperCase(property.charAt(0));
methodName.append("set").append(firstCharacter).append(property.substring(1));
return methodName.toString();
}
public void callSetters(Bean bean, String properties[], Object values[]) {
for (int idx = 0; idx < properties.length; idx++) {
String property = properties[idx];
Object value = values[idx];
String setterName = getSetterName(property);
try {
Method method = Bean.class.getMethod(setterName);
method.invoke(bean, value);
} catch (NoSuchMethodException nsmE) {
// method doesn't exist for the given property, handle...
} catch (InvocationTargetException itE) {
// failed to invoke on target, handle...
} catch (IllegalAccessException iaE) {
// can't access method, handle...
}
}
}
このコードは、同じ長さを想定properties
しており、からへvalues
の1対1のマッピングを持っているため、任意のインデックスの値は同じインデックスのプロパティを対象としています。property
value
注:これは、セッターがJavaの標準的な方法を使用して生成されることを前提としています(つまり、という名前のプロパティmyName
には、という名前のセッターがありsetMyName
ます。
すべてのプロパティがプレーンプロパティである場合、最もクリーンな方法はメソッドチェーンを使用することです。
ただし、作成するオブジェクトがより複雑な場合は、ビルダーパターンの使用を検討する必要があります。その説明は、http: //rwhansen.blogspot.com/2007/07/theres-builder-pattern-that-にあります。 joshua.html