java - 具有可比界面和通用列表的未经检查的转换警告

标签 java list generics comparable

当我将 Comparable 接口(interface)与通用或参数化列表一起使用时,我收到未经检查的转换警告。我可以使用 ObjectList 进行比较,但不能使用通用列表进行比较。这是我的开发,首先使用 ObjectList,然后使用通用 List。

这是我的 ListNode 类定义的片段:

public class ListNode {
    private Object info;
    private ListNode next;

和我的 ObjectList 类定义的片段:

public class ObjectList {
    private ListNode list;

和我的 Comparable 界面:

public interface Comparable {
    public int compareTo(Object o);
}

我的 ObjectList 类中有一个方法可以毫无问题地将 Object 参数与 ListNode 中的 Object 进行比较。这是比较代码:

if (((Comparable)o).compareTo(p.getInfo()) == 0)

我现在正在尝试创建一个通用的 List 类并进行类似的比较。这是我的通用 ListNode 类定义的片段:

public class ListNode<Type> {
    private Type info;
    private ListNode<Type> next;

以及我的通用 List 类定义的片段:

public class List<Type> {
    private ListNode<Type> list;

和我的通用 Comparable 接口(interface):

public interface Comparable<Type> {
    public int compareTo(Type t);
}

当我尝试与我的 ObjectList 类进行相同的比较时,我从我的通用 List 类中收到下面未经检查的转换警告:

List.java:239: 警告:[unchecked] 未经检查的转换 发现:类型 要求:比较

if (((Comparable<Type>)t).compareTo(p.getInfo()) == 0)

有什么想法吗?

这里是一些简化的代码:

public class List<Type> {
    public class ListNode<Type> {
        private Type info;
        private ListNode<Type> next;

        public ListNode() {
            info = null;
            next = null;
        }
    }

    private ListNode<Type> list;

    public List() {
        list = null;
    }

    public boolean contains(Type t) {
        ListNode<Type> p = list;
        while (p != null && (((Comparable<Type>)t).compareTo(p.info) != 0))
            p = p.next;
        return p != null;
    }
}



public interface Comparable<Type> {
        public int compareTo(Type t);
}

向列表类添加有界参数:

public class List<Type extends Comparable<Type>> {

解决警告问题。但是创建一个 String 对象列表会产生这个错误:

类型参数 java.lang.string 不在其范围内

最佳答案

为什么需要创建自己的 Comparable JDK 中已有接口(interface)? List of String创建失败的原因很简单,String没有自己的Comparable接口(interface)。它只实现了 java.lang.Comparable。只要做一些重命名,事情就会很清楚:你正在做的是:

public interface MyComparable<Type> {
    public int compareTo(Type t);
}

public class MyList<Type extends MyComparable<Type>> {
  //....
}

然后你试图创建一个 MyList<String>变量

String没有实现 MyComparable ,当然会引起问题。

关于java - 具有可比界面和通用列表的未经检查的转换警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15015035/

相关文章:

scala - 如何在不引入第三个类型参数的情况下在 Scala 泛型中请求相同的类型?

java接口(interface)泛型转换问题

java - 将 DTO 转换为 JSON

Java - 可编辑组合框验证

c++ - 在 C++ 中使用多重函数合并两个链表

java - 将 ArrayList<Subclass> 传递给使用 List<Superclass> 声明的方法

java - 如何在 Facebook 弃用后添加标题和内容?

java - 如何使用 JAXB 从 bean 生成 xml

python - 如果该值在另一个列表中被屏蔽,则从列表中删除元素

python - 在 python 中复制列表时使用 list() 的复杂性是什么?