1

アイデンティティに基づいて、クラス whereequals()およびhashCode()areのサブクラスを作成しています。final(具体的には、コントラクトを持つXML DOM XOM :

public final boolean equals(Object o)

    Tests for Node/Element identity. That is, two Node/Element objects 
    are equal if and only if they are the same object. 

Elementサブクラス化可能です(例

 FooElement extends xom.nu.Element

そして私はこれを広範囲に使用しています。私はまた、平等法を開発しました(例えば

fooElementA.isEqualTo(fooElementB)

セットとハッシュマップの作成に使用したいと思います。

XOM ライブラリーを書き直すことも、作成者にequals()メソッドをリリースするよう説得することもできません。使用できる一般的な回避策 (ラッパー、デリゲート、サブクラスHashMap化など) はありますか?

注:hashCode()も最終です。

4

2 に答える 2

2

独自の Comparator を使用してTreeSet (またはTreeMap ) を作成できます。

Set<Element> set = new TreeSet<Element>(new Comparator<Element>() {
    @Override
    public int compare(Element e1, Element e2) {
        // Your own compare logic
    }
});

ノート

ドキュメントから

Set インタフェースを正しく実装するためには、セットによって維持される順序 (明示的なコンパレータが提供されているかどうかにかかわらず) は equals と一致している必要があることに注意してください。

これは、equals メソッドの一般契約を履行していないことを意味します。

このメソッドを使用できるのは、ドキュメントで自分が何をしているのかを本当に明示している場合だけです。

于 2013-04-16T09:06:15.063 に答える