关于声明可比较对象列表的Java问题
这是一个非常简单的问题。我想声明一个对象列表,但我想确保所有对象都实现了可比较的接口。我该怎么办?我试着写作
List<Comparable> heap = new ArrayList<Comparable>();
但编译器给了我一个警告。正确的写作方法是什么
谢谢
后续行动: 我想我在发帖之前已经完成了这个问题,但显然我没有。所以让我把它完成吧
我的目的是列出以下对象: 1.实现可比较的接口 2.都是同一类型的
我能来吗
List<Comparable<?>> heap = new ArrayList<Comparable<?>>()
不,我不能。原因是我需要从列表中检索元素并比较它们。比如:
if( heap.get(0).compareTo(heap.get(1)) > 0)
如果使用通配符列表>;,编者会给我一个错误。说堆。获取(0)无法与堆匹配。所以我需要知道正确的申报方式
我发现有人问我警告是什么。。。。这让我感到惊讶。。。。。警告是: 这是一种原始类型。对泛型类型Compariable的引用应参数化
# 1 楼答案
也许您可以编写一个方法,该方法只接受扩展Comparable的类型并返回该类型的列表:
# 2 楼答案
这是因为您使用的是原始类型
Comparable
。您可以尝试为Comparable
提供一个wildcard类型参数:如果希望所有对象都是同一类型,可以按照
并从
getList()
返回您的列表# 3 楼答案
因为所有对象都是相同类型的(比如f.e.
FooType
),所以只需使用List<FooType>