-2

次の行でエラーが発生java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to java.util.HashSetします: (HashSet<String>) pos[targetPos3]).contains(word)

 public void search(String word, Object[] root){
    int targetPos1;
    int targetPos2;
    Object[] pos = root;

    targetPos1 = word.charAt(0) -'a';
    targetPos2 = word.charAt(1) -'a';
    int targetPos3 = word.charAt(2) - 'a';

    if(root[targetPos1]==null){
        System.out.println("1st letter NOT FOUND");
    }
    else{
         pos = (Object[]) root[targetPos1];
         if(pos[targetPos2]==null){
             System.out.println("2nd letter NOT FOUND");
         }
         else{
             if( ((HashSet<String>) pos[targetPos3]).contains(word)){
                 System.out.println("Word FOUND: " + word);
                 System.out.println(pos[targetPos3]);//output children
             }
             else{
                 System.out.println("NOT FOUND");
             }
         }
    }//end of else

}
4

6 に答える 6

0

見たObject[][]ところ、 として渡された がありrootます。

Object[](の 1 つ) の 1つを取得しtargetPos1ます。

次に、Objectその中の 1 つ ( の 1 つtargetPos3) を取得します。

次に、これObjectを a にキャストしようとすると、 aHashSet<String>がスローされClassCastExceptionます。

例外から、それObjectは実際には別のObject[][Ljava.lang.Object;できません...)であるように見えるためObject[][][]、ルートとして渡されたように見えます。または、少なくとも 2 次元配列のいくつかの要素はObject[]です。

instanceofキャストする前にチェックを行うか、できれば、渡すデータ構造が実際に何であるかを調べて、理解できない多次元配列ではなく、データ転送オブジェクトにすることをお勧めします。

于 2013-04-11T09:32:40.227 に答える