类强制转换异常HashSet

时间:2013-04-11 09:23:04

标签: java casting

我在第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

}

6 个答案:

答案 0 :(得分:1)

pos是对象,您正在尝试对其进行转换HashSet<String>,并提出ClassCastException

确定pos[targetPos3]不是HashSet

答案 1 :(得分:1)

鉴于

Object[] pos = root;

(HashSet<String>) pos[targetPos3]

pos[targetPos3]不得为HashSet<String>。如果不知道Object []数组实际包含什么(为什么它如此不具体?)以及你打算做什么,就不可能进一步回答你的问题。

答案 2 :(得分:1)

请尝试调试代码并检查word的数据类型..从错误日志中显示word的数据类型是object(可能是String或其他),并且您正在尝试将其分配给HashSet。 。

答案 3 :(得分:1)

实际上,你的代码和异常在pos [targetPos3]上有一个Object []。

你不能把它强制转换为HashSet。

答案 4 :(得分:0)

根据Object[][]传递的内容root,您有Object[]

你得到targetPos1之一(Object的那个)。

然后你从targetPos3得到Object之一。{/ p>

然后您HashSet<String>尝试转换为ClassCastException,这会引发Object

从异常看起来Object[]实际上是另一个[Ljava.lang.Object;Object[][][]不能......)所以你似乎有一个Object[]以root身份传入。或者至少第二维数组的一些元素是instanceof

我建议你在转换之前做一个{{1}}检查,或者最好找出你实际传递的数据结构是什么,然后把它变成一个数据传输对象而不是多维数组,甚至你的不明白。

答案 5 :(得分:0)

你不能这样做:

if ((HashSet<String>) pos[targetPos3]).contains(word))

但你试试这个:

private class ArrayTools
{
    public static<T> boolean contains (T [] array, T key)
    {
        for (T item : array)
        {
            if (item.equals(key))
            {
                return true;
            }
        }
        return false;
    }
}

然后你可以这样做:

if (ArrayTools.contains(pos[targetPos3], word))

注意:您不能将它与原语一起使用。