对象和抽象的 ArrayList
ArrayList of objects and abstract
我正在尝试学习 Java 中的通配符。在这里,我试图修改 printCollection
方法,以便它只需要扩展 AbstractList
的 class。它显示评论中的错误。我尝试使用 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) {
...这样,您的方法将只接受使用任何通用内容扩展 AbstractLists 的对象。
但正如其他评论者、海报和作者(J. Bloch:Effective Jave,p134+)已经正确指出的那样,更好的风格就是简单地尝试这样的事情:
void printCollection(AbstractList<?> c) {
在您的代码中,您假设参数应该实现 Collection
并且应该 包含 扩展 AbstractList
的元素
void printCollection(Collection<? extends AbstractList<?>> c)
要得到你想要的,你可以简单地这样写:
void printCollection(AbstractList<?> c)
我正在尝试学习 Java 中的通配符。在这里,我试图修改 printCollection
方法,以便它只需要扩展 AbstractList
的 class。它显示评论中的错误。我尝试使用 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) {
...这样,您的方法将只接受使用任何通用内容扩展 AbstractLists 的对象。
但正如其他评论者、海报和作者(J. Bloch:Effective Jave,p134+)已经正确指出的那样,更好的风格就是简单地尝试这样的事情:
void printCollection(AbstractList<?> c) {
在您的代码中,您假设参数应该实现 Collection
并且应该 包含 扩展 AbstractList
void printCollection(Collection<? extends AbstractList<?>> c)
要得到你想要的,你可以简单地这样写:
void printCollection(AbstractList<?> c)