Java中的ClassCastException

时间:2011-03-10 07:02:49

标签: java classcastexception

我在下面的代码中遇到了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

4 个答案:

答案 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)

看起来currentTreeNode ...

答案 2 :(得分:0)

System.out.println(target.compareTo(current.getValue()));

compareTo的返回类型是int,因此您可以使用

将原始int转换为String
System.out.println(Integer.toString(target.compareTo(current.getValue())));

目标的类型是什么?好像你正在将String与Integer进行比较。

答案 3 :(得分:0)

如果您的示例代码反映了您实际运行的内容,那么:

System.out.println(target.compareTo(current.getValue()));
  1. 您的代码未显示target的声明,但异常消息暗示必须String。 (您显示使用targetObject的声明......但这不是代码实际使用的内容!!)

  2. 您的代码未显示ToBeFound.getValue()方法的声明...但异常消息暗示必须Integer

  3. 如果参数对象不是String,String.compareTo(Object)将抛出CCE。