LoginSignup
1
0

More than 5 years have passed since last update.

[Java] フィールドのフィールド名を取得したい。(昔話口調)

Last updated at Posted at 2017-06-02

昔々、あるところに、以下のようなfieldsがありました。

public class Xxx {
    public String xxx1;
    public String xxx2;
    public String xxx3;
    public String xxx4;
    public String xxx5;
    public String xxx6;
    public String xxx7;
    public String xxx8;
    public String xxx9;
    public String xxx10;
}

そして、以下のようなListがありました。

List<String> list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
list.add("eee");

ある人は言いました。
「listをループして、フィールドの1から順番に設定してほしい。」

開発者Aは、以下のような実装をしました。

Xxx x = new Xxx();
int idx = 0;
x.xxx1  = (idx < list.size()) ? list.get(idx) : null;
idx++;
x.xxx2  = (idx < list.size()) ? list.get(idx) : null;
idx++;
x.xxx3  = (idx < list.size()) ? list.get(idx) : null;
idx++;
x.xxx4  = (idx < list.size()) ? list.get(idx) : null;
idx++;
x.xxx5  = (idx < list.size()) ? list.get(idx) : null;
idx++;
x.xxx6  = (idx < list.size()) ? list.get(idx) : null;
idx++;
x.xxx7  = (idx < list.size()) ? list.get(idx) : null;
idx++;
x.xxx8  = (idx < list.size()) ? list.get(idx) : null;
idx++;
x.xxx9  = (idx < list.size()) ? list.get(idx) : null;
idx++;
x.xxx10 = (idx < list.size()) ? list.get(idx) : null;

開発者Bは、以下のような実装をしました。

Xxx x = new Xxx();
for (int idx = 0; idx < list.size(); idx++) {
    x.getClass().getField("xxx" + (idx + 1)).set(x, list.get(idx));
}

以上。

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0