有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

关于声明可比较对象列表的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的引用应参数化


共 (3) 个答案

  1. # 1 楼答案

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

    public <T extends Comparable> List<T> getComparableList(T t) {
        List<T> heap = new ArrayList<T>();
        return heap;
    }
    
  2. # 2 楼答案

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

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

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

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

    并从getList()返回您的列表

  3. # 3 楼答案

    因为所有对象都是相同类型的(比如f.e.FooType),所以只需使用List<FooType>