2

这是一个非常简单的。我想声明一个对象列表,但我想确保所有对象都实现了 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>,编译器会给我一个错误。说 heap.get(0) 不能匹配 heap.get(1) 所以我需要知道声明它的正确方法。

我发现有人问我警告是什么......这让我感到惊讶......好吧,警告是:Comparable 是一种原始类型。对泛型 Comparable 的引用应该被参数化

4

3 回答 3

4

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

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

如果您希望所有对象都属于同一类型,您可以按照以下方式执行操作

public static <T extends Comparable<? super T>> List<T> getList() {
    ...
}

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

于 2013-08-23T01:53:41.267 回答
1

由于您所有的对象都是同一类型(比如说 fe FooType),所以只需使用 a List<FooType>

于 2013-08-23T14:27:15.493 回答
0

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

public <T extends Comparable> List<T> getComparableList(T t) {
    List<T> heap = new ArrayList<T>();
    return heap;
}
于 2013-08-23T02:38:32.170 回答