2013-08-23 35 views
1

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

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

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

感谢

追问: 我认为我已经完成了问题之前,我张贴,但显然我没有。所以让我完成它。

我的目的是有对象的列表: 1.实现了Comparable接口 2.与同类型是否所有

我能把它

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

不,我不能“T。原因是因为我需要从列表中检索元素并进行比较。像:

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

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

我发现有人问我警告是什么......那让我感到惊讶.....好,警告是: 可比较是一种原始类型。泛型类型的参考类似应参数化

+0

什么警告?你可以发布吗?尝试'可比较' – nachokk

+0

你能发布收到的警告吗? –

+0

[Java语法的可比对象列表]的可能重复(http://stackoverflow.com/questions/10763390/java-syntax-for-a-list-of-comparable-objects) – Raedwald

回答

1

因为所有的对象都是同一类型的(比方说FE FooType),然后只需使用List<FooType>即可。

4

这是因为您正在使用原始类型Comparable。你可以尝试给Comparable一个wildcard类型参数:

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

如果你想的对象都是同一类型的,你可以沿着

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

和返回线路做一些事情您的名单从getList()

0

也许你可以写一个只需要扩展可比类型和返回类型列表的方法:

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