当我将 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/