java - 对象和抽象的ArrayList

标签 java arraylist wildcard subtyping

我正在尝试学习 Java 中的通配符。在这里,我尝试修改 printCollection 方法,以便它只采用扩展 AbstractList 的类。它显示评论中的错误。我尝试使用对象的ArrayList,它工作得很好。我正在使用 Java 7。

import java.util.AbstractList;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Set;

public class Subtype {
    void printCollection(Collection<? extends AbstractList<?>> c) {
        for (Object e : c) {
            System.out.println(e);
        }
    }

    public static void main(String[] args) {
        Subtype st= new Subtype();
        ArrayList<String> al = new ArrayList<String>();
        al.add("a");
        al.add("n");
        al.add("c");
        al.add("f");
        al.add("y");
        al.add("w");
        //The method printCollection(Collection<? extends AbstractList<?>>) in the type Subtype is not applicable for the 
        // arguments (ArrayList<String>)
        st.printCollection(al);
    }

}

最佳答案

您正在请求 AbstractList 对象的集合,例如填充有 AbstractList 的列表。这真的是你想要的吗?

解决这个问题的一种方法是......

<T extends AbstractList<?>> void printCollection(T c) {

...这样,您的方法将只接受使用任何通用内容扩展 AbstractList 的对象。

但正如其他评论者、海报和作家(J. Bloch:Effective Jave,p134+)已经正确指出的那样,更好的风格只是尝试这样的事情:

void printCollection(AbstractList<?> c) {

关于java - 对象和抽象的ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32032165/

相关文章:

java - 线程运行方法

java - 如何将哈希表 Arraylist 获取到其他 Intent ?

android - 列表<字符串> log = new ArrayList<字符串>();

wildcard - 如何获取snakemake输出规则中通配符值的基本名称?

java - 使用 Jsoup 从 html 中提取注释

java - 在自动触发默认监听器之前触发 Hibernate 自定义事件监听器

java - 使用数组中的单个数字循环打印

java - 将 Java 文件中的 ArrayList 值映射到 JSP 文件中的 HTML 对象

windows - cmd for 循环转义?在集合中?

windows - 有没有办法让 Perl 支持通配符命令行参数,例如 Windows 上的 "*.txt"?