关于java:如何修复代码以删除-Xlint:编译时未经检查的警告

How to fix code to remove -Xlint:unchecked warning while compiling

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
How do I address unchecked cast warnings?

当我使用-xlint:unchecked编译时,我的程序编译并正常工作,但我正在寻求帮助以删除此警告。感谢您的帮助!谢谢你

这是警告:

1
2
3
4
5
java: warning: [unchecked] unchecked cast
found   : E
required: java.lang.Comparable<E>

                            ^^^^

给出警告的代码是:

1
2
3
4
5
6
7
8
9
10
11
12
13
public boolean contains(E obj) {

    Node<E> curr = head;

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

            curr = curr.next;
        }

        return false;
    }


如果假设类中的所有数据都必须实现Comparable接口,那么应该将其添加到类声明中,否则在不实现此接口的类中使用此方法时,可以获得ClassCastException

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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...
}

这似乎是contains(...)方法的一个有缺陷的实现。对象不必具有可比性,它们只能是相等的。只需使用equals(...)即可:

1
2
3
4
5
6
7
8
9
10
11
12
public boolean contains(E obj) {
    Node<E> curr = head;

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

    return false;
}


在obj上调用compareTo方法时,应按如下方式更改contains方法的签名,以避免任何类型转换:

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

这还将要求传递给contains方法的任何e都已经实现可比较的接口。