2010/05/14
フィールドに代入されてるインスタンスにフィールド名を文字列としてセットしようとした
public class Foo { String id; public void setId(String id) { this.id = id; } }
みたいなクラス Foo があって、Foo のインスタンスを複数保持する Bar が
public class Bar { Foo foo1; Foo foo2; Foo foo3; public Bar() { foo1 = new Foo(); foo1.setId("foo1"); foo2 = new Foo(); foo2.setId("foo2"); foo3 = new Foo(); foo3.setId("foo3"); } }
のように、各 Foo 型のインスタンスにフィールド名と同じ文字列をセットしてるんだ*1
でも、これだとスペルミスで間違った文字列つっこむことがあってめんどくさい!
foo1.setId(foo1.getFieldName());
みたいなことができないかな>< でもそんなメソッドないです><
ということでリフレクションで無理やり実装した
public class Bar { Foo foo1; Foo foo2; Foo foo3; public Bar() { // 宣言されてるフィールドを全部取得 for (Field f : getClass().getDeclaredFields()) { Object o; try { // インスタンス生成 o = f.getType().newInstance(); if (o instanceof Foo) { // Foo 型だったらフィールド名をセット ((Foo) o).setId(f.getName()); f.set(this, o); } } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } } }
うん、余計めんどくさくなった
*1:そもそもその処理自体がどうなんだ
トラックバック - http://d.hatena.ne.jp/drillbits/20100514/set_field_name_to_instance
リンク元
- 79 http://drillbits.jp/
- 19 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4GGLL_jaJP348JP348&q=javascript タイムゾーン クライアント
- 10 http://drillbits.jp/archives/
- 9 http://www.google.co.jp/search?hl=ja&lr=lang_ja&tbs=lr:lang_1ja&q=JavaScript+getTime+タイムゾーン&aq=f&aqi=&aql=&oq=&gs_rfai=
- 6 http://www.google.co.jp/search?hl=ja&q=javascript+タイムゾーン&aq=f&aqi=g2&aql=&oq=&gs_rfai=
- 6 http://www.google.co.jp/search?q=javascript+タイムゾーン&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&hl=ja&client=firefox-a
- 5 http://tweetbuzz.jp/entry/4054886/d.hatena.ne.jp/drillbits/20091217/gxt
- 5 http://www.google.co.jp/search?sourceid=chrome&ie=UTF-8&q=Ext+GWT+site:d.hatena.ne.jp
- 4 http://d.hatena.ne.jp
- 4 http://www.google.co.jp/search?hl=ja&lr=lang_ja&client=firefox-a&tbo=p&rls=org.mozilla:ja:official&channel=s&tbs=lr:lang_1ja,blg:1&q=getDeclaredFields&aq=f&aqi=&aql=&oq=&gs_rfai=
