• ベストアンサー

まずい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や配列にしていれば問題ないのですが上記のように書き下されているのです

質問者が選んだベストアンサー

  • ベストアンサー
  • bgbg
  • ベストアンサー率53% (94/175)
回答No.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) { } }

guuman
質問者

お礼

ありがとうございます リフレクションは便利そうですね

その他の回答 (1)

noname#49664
noname#49664
回答No.1

例えば、DataClassを継承したクラスを定義し、そこで配列を引数に持つコンストラクタを用意するのはどうでしょう? そうした形でサブクラスによる対応はできないのでしょうか?

guuman
質問者

お礼

ありがとうございます

関連するQ&A

専門家に質問してみよう