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 方法的签名,以避免compareTo在 obj 上调用方法时进行任何类型转换:

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 回答