向ArrayList<Data>添加元素报错,求问题原因与解决办法
解决ArrayList添加Data元素报错的问题
报错原因
你的代码存在两个核心问题:
- 代码位置错误:
array.add(...)这类执行语句不能直接写在类的成员区域(和字段声明并列的位置),必须放在方法内部,比如main方法中。 - 元素添加方式错误:你的
ArrayList<Data>只能存储Data类型的对象,但你直接传入了String和int两个参数,ArrayList.add()并没有这种参数组合的重载方法,必须先创建Data类的实例,再将实例添加到集合中。
修复后的完整代码
public class Data { private String name; private int age; Data(String n, int a) { name = n; age = a; } // 必须确保该方法存在,否则调用x.Print()会报错 public void Print() { System.out.println("姓名:" + name + ",年龄:" + age); } } import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class Lab5 { public static void main(String args[]) { Data x = new Data("Fred", 41); x.Print(); // 将ArrayList的创建和元素添加操作移至main方法内 ArrayList<Data> array = new ArrayList<>(); // Java7+可用菱形语法简化泛型声明 // 先创建Data实例,再添加到集合中 array.add(new Data("Jack",42)); array.add(new Data("Marie",22)); array.add(new Data("David", 41)); // 调用打印方法输出集合内容 PrintCollection(array); } public static void PrintCollection(Collection<Data> c) { for (Iterator<Data> iter = c.iterator(); iter.hasNext();) { Data x = iter.next(); // 泛型已限定类型,无需强制转换 x.Print(); } System.out.println(); } }
额外优化提示
- Java 7及以上版本支持菱形语法
new ArrayList<>(),编译器会自动推断泛型类型,简化代码。 PrintCollection方法中,由于泛型Collection<Data>的限定,iter.next()返回的已经是Data类型,不需要额外的强制类型转换,可直接使用。
内容的提问来源于stack exchange,提问作者DestinyFcker
相关产品推荐
相关产品推荐

