0

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

4 回答 4

1

正如compareTojavadoc所说:

ClassCastException - 如果指定对象的类型阻止它与此对象进行比较。

看来您的targetis 是一种String类型,它Comparable<String>返回current.getValue()一个Integer类型的对象。

你可以尝试做String.valueOf(current.getValue)如果它工作正常那么我是对的。:)

于 2011-03-10T07:07:35.183 回答
0
private ToBeFound find(TreeNode current, Comparable targetObject)

看起来current是一个TreeNode...

于 2011-03-10T07:07:49.613 回答
0
System.out.println(target.compareTo(current.getValue()));

返回类型compareTo是 int,因此您可以使用将原始 int 转换为 String

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

目标的类型是什么?似乎您正在将字符串与整数进行比较。

于 2011-03-10T07:12:33.447 回答
0

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

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

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

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

于 2011-03-10T07:19:54.177 回答