我在下面的代码中遇到了ClassCastException,这对我来说没有多大意义,因为targetObject
是Comparable而current
是ToBeFound。整数和字符串来自哪里?
ToBeFound origin = new ToBeFound();
public ToBeFound findWrapper(Comparable targetObject)
{
return find(origin, targetObject);
}
private ToBeFound find(ToBeFound current, Comparable targetObject)
{
if (current == null)
{
return null;
}
System.out.println(targetObject.compareTo(current.getValue()));
// Exception in thread "main" java.lang.ClassCastException:
// java.lang.Integer cannot be cast to java.lang.String
return new ToBeFound();
}
//body of main() that calls the methods
master.find( (Comparable) scanner.next());
// Scanner is a java.util.Scanner scanning System.in
答案 0 :(得分:1)
作为compareTo
javadoc陈述:
ClassCastException - 如果指定对象的类型阻止将其与此对象进行比较。
您的target
似乎是String
类型Comparable<String>
而current.getValue()
返回Integer
类型的对象。
你可以尝试String.valueOf(current.getValue)
如果它正常,那么我是对的。 :)
答案 1 :(得分:0)
private ToBeFound find(TreeNode current, Comparable targetObject)
看起来current
是TreeNode
...
答案 2 :(得分:0)
System.out.println(target.compareTo(current.getValue()));
compareTo
的返回类型是int,因此您可以使用
System.out.println(Integer.toString(target.compareTo(current.getValue())));
目标的类型是什么?好像你正在将String与Integer进行比较。
答案 3 :(得分:0)
如果您的示例代码反映了您实际运行的内容,那么:
System.out.println(target.compareTo(current.getValue()));
您的代码未显示target
的声明,但异常消息暗示必须为String
。 (您显示使用targetObject
的声明......但这不是代码实际使用的内容!!)
您的代码未显示ToBeFound.getValue()
方法的声明...但异常消息暗示必须为Integer
。
如果参数对象不是String,String.compareTo(Object)
将抛出CCE。