我正在尝试学习 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/