フォルダ構造の表現など、ツリー内でソートする必要のある数百のアイテムがあるとします。Javaでenum形式のツリーを作成するには?
a1
/| \
a2 b2 c2
/| |
a3 b3 c3
これらの項目も、それぞれ手動で記述する必要があるため、コード内で静的に定義されます。
ここでは、ほとんどの場合、これらのアイテムをツリー内のパスでアクセスしています。私は文字列の識別で実装したくないのです。なぜなら、コード内の単純なタイプミスによる問題を避けたいからです(IDEは文字列内の構造体のタイプミスを助けないためです)。私は、クラスを実装することによって、これを達成でき
Item item = tree.a1.a2.b3;
:たとえば、次のように:
//Any typo inside the Strings would be ignored by the IDE.
Item item = tree.getChild("a1").getChild("a2").getChild("b3");
または:私は単にような何かを行うことができれば
Item item = tree.get("a1\\a2\\b3");
マイツリー構造は、より堅牢になりしかし、すべての単一の項目のために、これは過度のように聞こえる。よりシンプルな方法が必要ですか?
私はちょうど1次元のリストでこれをやっていた場合、私は私が望むものを達成するために列挙型を使用することができます。
public enum Item {
A1(1, "Description1"),
A2(2, "Description2"),
A3(3, "Description3");
int prop1;
String prop2;
Item(int prop1, String prop2) {
this.prop1 = prop1;
this.prop2 = prop2;
}
}
Item item = Item.A3;
ツリーの列挙のような構造が存在する場合、それはいいだろうので。このような構造のアイテムへのパスはロックされていないようですが、私は雛形の列挙型を試しました。私は低レベルのアイテムにアクセスすることができます。
列挙型の代わりに適切なクラスに問題がありますか?必要なのは 'Tree'と' Child'の2つのクラスだけで、 'Child'は他の' Child'クラスを参照することができます。 –
"item item = tree.a1.a2.b3"はコンパイル時のものです。よりダイナミックなものがほしい。右? –
@ cricket_007 *これは、1つのアイテムごとにクラスを実装することで達成できますが、これは過度の攻撃のようです。より簡単な方法が必要ですか?* –