Java问题关于声明Comparable对象列表

时间:2013-08-23 01:51:50

标签: java

这是一个非常简单的。我想声明一个对象列表,但我想确保所有对象都实现了Comparable接口。我该怎么办?我试着写

   List<Comparable> heap = new ArrayList<Comparable>();

但编译器给了我一个警告。写它的正确方法是什么?

由于

跟进: 在我发布之前我以为我已经完成了这个问题,但显然我没有。所以让我完成它。

我的目的是拥有一个对象列表: 1.实现Comparable接口 2.所有类型都相同

我可以做到吗

   List<Comparable<?>> heap = new ArrayList<Comparable<?>>()
不,我不能。原因是因为我需要从列表中检索元素并进行比较。像:

   if( heap.get(0).compareTo(heap.get(1)) > 0)

如果我使用通配符List&gt;,编译器会给我一个错误。说heap.get(0)不能匹配heap.get(1)所以我需要知道声明它的正确方法。

我发现有人问我警告是什么......让我感到惊讶.....嗯,警告是: 可比较是原始类型。对泛型类型Comparable的引用应该参数化

3 个答案:

答案 0 :(得分:4)

这是因为您使用的是原始类型Comparable。您可以尝试提供Comparable wildcard类型参数:

List<Comparable<?>> heap = new ArrayList<Comparable<?>>();

如果您希望所有对象都属于同一类型,您可以按照

的方式执行某些操作
public static <T extends Comparable<? super T>> List<T> getList() {
    ...
}

并从getList()返回您的列表。

答案 1 :(得分:1)

由于您的所有对象属于同一类型(假设为f FooType),因此只需使用List<FooType>

答案 2 :(得分:0)

也许您可以编写一个方法,该方法只接受扩展Comparable的类型并返回该类型的List:

public <T extends Comparable> List<T> getComparableList(T t) {
    List<T> heap = new ArrayList<T>();
    return heap;
}