当我使用具有通用或参数化列表的Comparable接口时,我收到了未经检查的强制转换警告。我可以使用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接口:
public interface Comparable<Type> {
public int compareTo(Type t);
}
当我尝试与我的ObjectList类进行相同的比较时,我从我的通用List类中得到未经检查的强制转换警告:
List.java:239:警告:[未选中]未经检查的强制转换 发现:类型 必需:可比较
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不在其绑定范围内
答案 0 :(得分:2)
为什么你需要创建自己的Comparable
接口,而JDK中已有一个接口?无法创建String of List的原因很简单,因为String没有自己的Comparable接口。它只实现了java.lang.Comparable。只需做一些重命名,事情就会清楚:你在做什么:
public interface MyComparable<Type> {
public int compareTo(Type t);
}
public class MyList<Type extends MyComparable<Type>> {
//....
}
然后您尝试创建MyList<String>
变量
String
未实施MyComparable
,当然这会导致问题。
答案 1 :(得分:0)
首先将List声明更改为以下代码。这使得参数化类型必须是Comparable。
List<Type extends Comparable<Type>>
然后您可以直接致电t.compareTo(p.info)
而无需演员表。其次,将ListNode类移动到自己的文件中。