2

重複の可能性:
チェックされていないキャストの警告に対処するにはどうすればよいですか?

-Xlint:unchecked を指定してコンパイルすると、プログラムは正しくコンパイルおよび動作しますが、この警告を削除する方法を探しています。どんな助けでも大歓迎です!ありがとうございました

これは警告です:

java: warning: [unchecked] unchecked cast
found   : E
required: java.lang.Comparable<E>

                            ^^^^

警告を与えるコードは次のとおりです。

public boolean contains(E obj) {

    Node<E> curr = head;

        while (curr != null) {
                return true;
            }

            curr = curr.next;
        }

        return false;
    }
4

3 に答える 3

1

クラス内のすべてのデータがインターフェイスを実装する必要があると想定している場合Comparableは、クラス宣言に追加する必要がありClassCastExceptionます。そうしないと、このインターフェイスを実装していないクラスでこのメソッドを使用するときに を取得できます。

public class SomeClass<E extends Comparable<E>> {

    public boolean contains(E obj) {
        Node<E> curr = head;
        while (curr != null) {
        if (obj.compareTo(curr.data) == 0) {
                return true;
            }
            curr = curr.next;
        }
        return false;
    }

    //the rest of your implementation...
}
于 2012-10-10T04:53:48.177 に答える
0

次のように、contains メソッドのシグネチャを変更して、compareToobj でメソッドを呼び出す際の型キャストを回避する必要があります。

public <E extends Comparable<E>> boolean contains(E obj)
{
    return true;
}

これにより、contains メソッドに渡された E は、すでに Comparable インターフェイスを実装している必要があります。

于 2012-10-10T04:46:09.877 に答える
0

これは、contains(...)メソッドの実装に欠陥があるように思われます。オブジェクトは比較可能である必要はありません。同等である必要があります。equals(...)代わりに単に使用してください:

public boolean contains(E obj) {
    Node<E> curr = head;

    while (curr != null) {
        if (curr.data.equals(obj)) {
            return true;
        }
        curr = curr.next();
    }

    return false;
}
于 2012-10-10T04:46:23.043 に答える