【发布时间】:2015-08-16 05:34:43
【问题描述】:
我正在尝试学习 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而不是所有实现List接口(合同)的列表的特定原因?通过指定AbstractList,您将代码耦合到特定实现。只要有可能,您应该编写接口而不是实现。 -
@MickMnemonic 谢谢我会记住这一点。
标签: java arraylist wildcard subtyping