Java 为什么可以';t我使用ArrayList<;字符串>;作为泛型ArrayList的参数<;E>;方法
我正在学习泛型,所以我制作了一个简单的java程序,这样我就可以了解它们到底是如何工作的。但是现在我被这个程序困住了,因为我不明白为什么它不起作用Java 为什么可以';t我使用ArrayList<;字符串>;作为泛型ArrayList的参数<;E>;方法,java,generics,Java,Generics,我正在学习泛型,所以我制作了一个简单的java程序,这样我就可以了解它们到底是如何工作的。但是现在我被这个程序困住了,因为我不明白为什么它不起作用 public static void main(String[] args) { ArrayList<String> strings = new ArrayList<>(); strings.add("A"); strings.add("B"); pri
public static void main(String[] args)
{
ArrayList<String> strings = new ArrayList<>();
strings.add("A");
strings.add("B");
printList(strings);
}
public static <E extends List<E>> void printList(ArrayList<E> l)
{
for (E obj : l)
{
System.out.println(obj.toString());
}
}
publicstaticvoidmain(字符串[]args)
{
ArrayList字符串=新的ArrayList();
字符串。添加(“A”);
字符串。添加(“B”);
打印列表(字符串);
}
公共静态无效打印列表(ArrayList l)
{
对于(E obj:l)
{
System.out.println(obj.toString());
}
}
几乎肯定不是你想要的。这说明您的元素类型是一个自身的列表
相反,只写
几乎肯定不是你想要的。这说明您的元素类型是一个自身的列表
相反,只写
您的通用参数E
不应扩展列表。如果E扩展列表
,那么您应该期待List
您的方法应该如下所示:
public static <E> void printList(List<E> list) {
for (E obj : list) {
System.out.println(obj);
}
}
公共静态无效打印列表(列表){
对于(E obj:列表){
系统输出打印项次(obj);
}
}
注:
- 使用有意义的参数名称,如
notlist
,以便代码维护人员理解您的代码l
可以简化为System.out.println(object.toString())
,因为将自动调用System.out.println(object)
toString()
- 如果希望代码更加健壮,请将参数设置为
,以便可以接受所有List
对象,例如List
和所有其他实现LinkedList
E
不应扩展列表。如果E扩展列表
,那么您应该期待List
您的方法应该如下所示:
public static <E> void printList(List<E> list) {
for (E obj : list) {
System.out.println(obj);
}
}
公共静态无效打印列表(列表){
对于(E obj:列表){
系统输出打印项次(obj);
}
}
注:
- 使用有意义的参数名称,如
notlist
,以便代码维护人员理解您的代码l
可以简化为System.out.println(object.toString())
,因为将自动调用System.out.println(object)
toString()
- 如果希望代码更加健壮,请将参数设置为
,以便可以接受所有List
对象,例如List
和所有其他实现LinkedList
E
来扩展列表
?因为您已指定E
来扩展列表
。对于String
,这是不正确的。您的形式参数实际上是ArrayList。您在方法泛型中指定的是,传递给方法的参数将是ArrayList
。基本上是一张名单。然后,您向它传递一个字符串列表
。只需取出
部件,您就可以开始了。为什么需要E
来扩展列表
?因为您已指定E
来扩展列表
。对于String
,这是不正确的。您的形式参数实际上是ArrayList。您在方法泛型中指定的是,传递给方法的参数将是ArrayList
。基本上是一张名单。然后,您向它传递一个字符串列表
。只要拿出
部件,您就可以开始了。