gpt4 book ai didi

java - ArrayList 是一种原始类型。对泛型类型 ArrayList 的引用应参数化,修复导致错误的问题

转载 作者:行者123 更新时间:2023-11-30 07:15:30 24 4
gpt4 key购买 nike

我有下面的一行代码。

List<? extends SortKey> sortKeys = new ArrayList();

这导致了警告 ArrayList is a raw type. References to generic type ArrayList<E> should be parameterized 。我做了一些研究,发现了这些问题 - Collections of generics “Cannot instantiate the type ArrayList”How can elements be added to a wildcard generic collection? 。所以我构建了一个public List如下所示。

public <T extends SortKey> List<T> sortKeys() {
List<SortKey> keys = new ArrayList<SortKey>();
keys.add(new RowSorter.SortKey( 0, SortOrder.ASCENDING));
keys.add(new RowSorter.SortKey( 1, SortOrder.ASCENDING));
return keys;
}

但是,当我尝试编译此代码时,出现错误 Type mismatch: cannot convert from List<RowSorter.SortKey> to List<T> 。我该如何修复这个错误?

<小时/>

注意
我还发现了代码行 List<? extends SortKey> sortKeys = new ArrayList<>(); ,删除警告但我不明白为什么?如果有人花时间解释这一点或引用一些能让我理解的内容,我将不胜感激。

<小时/>

编辑
使用以下代码修复错误。

public <T extends SortKey> List<T> sortKeys() {
List<T> keys = new ArrayList<T>();
keys.add((T) new RowSorter.SortKey( 0, SortOrder.ASCENDING));
keys.add((T) new RowSorter.SortKey( 1, SortOrder.ASCENDING));
return keys;
}

但是,产生了新的警告,其中指出 Type safety: Unchecked cast from RowSorter.SortKey to T .

最佳答案

对于第一个问题,您缺少 new ArrayList() 上的通用大括号-> new ArrayList<>() .

对于第二个问题,您尝试使用 SortKey(当然,它不是从 SortKey 扩展的)作为列表类型。

但不确定为什么要这样存储它们,因为您可以按父类(super class)类型存储子类。

关于java - ArrayList 是一种原始类型。对泛型类型 ArrayList<E> 的引用应参数化,修复导致错误的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38487087/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com