ClassCastException в Java - PullRequest
       3

ClassCastException в Java

0 голосов
/ 10 марта 2011

Я получаю ClassCastException в приведенном ниже коде, что не имеет особого смысла для меня, поскольку targetObject является сопоставимым, а current является ToBeFound.Откуда берутся Integer и String?

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 ]

1 голос
/ 10 марта 2011

Как compareTo Javadoc заявляет:

ClassCastException - если тип указанного объекта препятствует тому, чтобы это сравнивалось с этим объектом.

Кажется, что ваш target имеет тип String, который Comparable<String>, а current.getValue() возвращает объект типа Integer.

Вы можете попробовать сделать String.valueOf(current.getValue), если все работает нормально, тогда я прав.:)

0 голосов
/ 10 марта 2011

Если ваш пример кода отражает то, что вы на самом деле используете, то:

System.out.println(target.compareTo(current.getValue()));
  1. Ваш код не показывает объявление для target, но сообщение об исключении подразумевает, что оно должно быть String. (Вы показываете, что используете объявление для targetObject ... но это не то, что на самом деле использует код !!)

  2. Ваш код не показывает объявление для метода ToBeFound.getValue() ... но сообщение об исключении подразумевает, что оно должно быть Integer.

  3. String.compareTo(Object) выдает CCE, если объект параметра не является строкой.

0 голосов
/ 10 марта 2011
System.out.println(target.compareTo(current.getValue()));

Возвращаемый тип compareTo - это int, поэтому вы можете преобразовать ваш примитив int в String, используя

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

Какой тип цели? Похоже, вы сравниваете строку с целым числом.

0 голосов
/ 10 марта 2011
private ToBeFound find(TreeNode current, Comparable targetObject)

Похоже, current это TreeNode ...

...