0

この奇妙な問題が発生しました。私は、異なるクラスに属するさまざまなオブジェクトを扱っています。私がやろうとしているのは、再帰アルゴリズムを使用して、オブジェクトが別のオブジェクト内にある可能性のある別のオブジェクトと等しいかどうかを確認することです:

private static void foundObject(EObject obj, EObject set) {

        if(EcoreUtil.equals(obj, set)){
                System.out.println("The objects are the same: \n\t"+obj+"\n\t"+set);
                return;
        } else {
                System.out.println("The objects are not the same: \n\t"+obj+"\n\t"+set+" "+set.eContents());        
                if(set.eContents().size()>0){
                    for(EObject child: set.eContents()){
                        foundObject(obj, child);
                     }
                 }
        }           
}

そして、割り当てクラスのオブジェクトがグループ内にあるかどうかを確認したい:

  • 割り当て
  • グループ[割り当て、キーワード]

ご覧のとおり、Group オブジェクト内に、検索したいオブジェクトのリストがあります。この場合、次の出力があります。

> The objects are not the same: 
    Assignment
    Group [Assignment, Keyword]
The objects are the same: 
    Assignment
    Assignment
The objects are not the same: 
    Assignment
    Keyword

どちらが正しいです。問題は、最初のグループが別の割り当て要素を取得したときです

グループ [課題、キーワード、課題]

アルゴリズムは対応する一致を認識せず、次のような出力を提供します。

The objects are not the same: 
    Assignment
    Group [Assignment, Keyword, Assignment]
The objects are not the same: 
    Assignment
    Assignment
The objects are not the same: 
    Assignment
    RuleCall
The objects are not the same: 
    Assignment
    Keyword
The objects are not the same: 
    Assignment
    Assignment
The objects are not the same: 
    Assignment
    RuleCall

しかし、私の場合、要素の 2 番目のペアは同じです (そのため、ECoreUtil.equals を使用しています)。なぜこれが起こっているのかについて何か考えはありますか?.

4

0 に答える 0