0

targetObject以下のコードで ClassCastException を取得していますが、Comparable でありcurrentToBeFound であるため、あまり意味がありません。整数と文字列はどこから来たのですか?

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 - 指定されたオブジェクトの型が原因で、このオブジェクトと比較できない場合。

あなたtargetStringタイプのオブジェクトであり、それComparable<String>を返すタイプのようです。current.getValue()Integer

問題なく動作する場合は、試してみることができますString.valueOf(current.getValue)。それなら私は正しいです。:)

于 2011-03-10T07:07:35.183 に答える
0
System.out.println(target.compareTo(current.getValue()));

の戻り値の型compareToは int であるため、次を使用してプリミティブ int を String に変換できます。

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

ターゲットの種類は何ですか?String と Integer を比較しているようです。

于 2011-03-10T07:12:33.447 に答える
0

サンプル コードが実際に実行しているものを反映している場合:

System.out.println(target.compareTo(current.getValue()));
  1. あなたのコードは の宣言を示していませんが、例外メッセージはそれが でなければならないtargetことを暗示しています。(宣言の使用を示しています...しかし、それはコードが実際に使用しているものではありません!!)StringtargetObject

  2. あなたのコードはメソッドの宣言を示していません...ToBeFound.getValue()しかし、例外メッセージはそれが.Integer

  3. パラメータ オブジェクトが文字列でない場合、String.compareTo(Object)は CCE をスローします。

于 2011-03-10T07:19:54.177 に答える
0
private ToBeFound find(TreeNode current, Comparable targetObject)

currentのように見えTreeNodeます...

于 2011-03-10T07:07:49.613 に答える