今日の私の目標は非常に単純です。DefaultMutableTreeNode を拡張するクラスに compareTo (または Comparable) インターフェイスを実装する適切な方法を見つけようとしています。
問題は次のとおりです。時間を表す完全に優れたクラスがあるとします。Arrays.sort() でテストした完全に優れた compareTo メソッド (希望どおりに動作する) を既に作成しており、すばらしい結果が得られています。
ここで、次のように、さまざまなオブジェクトの束を持つ JTree があるとします。
new SpecialNode("Zomg a string!"); // add this group of nodes right here
new SpecialNode(new Time("8:55 PM"));
new SpecialNode(new SomeTypeYouveNeverHeardOf());
だから、プロのプログラマーとして、何も考えずにすぐにコーディングを開始します。ここに私の SpecialNode クラスがあります:
class SpecialNode extends DefaultMutableTreeNode implements Comparator<SpecialNode>
{
public int compareTo(SpecialNode sn)
{
// Not only does this not work correctly (read: at all)
// But, it is sub-par, how do I get the type information out of the userObject
// So I can cast it correctly and call the correct compareTo method!!
return this.getUserObject().toString().compareTo(sn.getUserObject().toString());
}
}
わかりましたので、もしあなたがコメントを読まなかったなら (それは認めますが、あなたは読んでいませんでした); 私の問題は、SpecialNode の compareTo メソッド内で、userObject にしかアクセスできないことです。悲しいことに、私は userObject が何だったのかわかりません。そのため、適切にキャストして正しい compareTo メソッドを呼び出すことができません!
ツリーに追加されるすべてのクラスで、いくつかの完全に優れたcompareToメソッドをすでに作成しているため、これは本当に面倒です。それで、誰かが男を助けて、私にヒントをドロップできますか?
tl;dr - DefaultMutableTreeNode が格納する汎用オブジェクトから型情報を取得するにはどうすればよいですか? それが不可能な場合、SpecialNode の 2 つのインスタンスが何を含んでいるのかさえわからないのに、それらを比較するにはどうすればよいでしょうか!
前もって感謝します。