- ベストアンサー
まずいClass定義への対応
public class DataClass { public String data0=""; public String data1=""; .............................. public String data99=""; } と定義されたDataClassのインスタンスに文字列データxyzn(nはメンバーの通し番号)を入れるときに DataClass dataclass=new DataClass(); dataclass.data0="xyz0"; dataclass.data0="xyz1"; .............................. dataclass.data0="xyz99"; のように100行書き下さないでfor文を使うなどして短い行で済ませる方法はないでしょうか? ただしまずいDataClassの定義は変えられません DataClassのメンバー変数をArrayListや配列にしていれば問題ないのですが上記のように書き下されているのです
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Javaではリフレクションという仕組みを使って、フィールドやメソッド、クラスを動的に 名前をつけてアクセスすることができます。 Field field = 当該クラス.class.getField(フィールド名); でフィールドのインスタンスを取得し、 field.set(値をセットするクラスのインスタンス,値); で値を代入することができます。 サンプルソースで確認してみてください。dataclassに値が代入されると思います。 ---------- サンプルソース ---------- DataClass dataclass = new DataClass(); for(int i = 0; i < 5; i++){ String fieldName = "data" + i; String value = "xyz" + i; try { java.lang.reflect.Field target = DataClass.class.getField(fieldName); target.set(dataclass,value); } catch (Exception e) { } }
その他の回答 (1)
例えば、DataClassを継承したクラスを定義し、そこで配列を引数に持つコンストラクタを用意するのはどうでしょう? そうした形でサブクラスによる対応はできないのでしょうか?
お礼
ありがとうございます
お礼
ありがとうございます リフレクションは便利そうですね