我在第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
}
答案 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))
注意:您不能将它与原语一起使用。