所以我正在为一所大学编写一个注册系统应用程序(用JAVA编写)我有三个班级学生,教师和课程。在驱动程序类中,我有三个每种类型的ArrayLists来保存所述类型的不同对象。我需要一个选项来打印列表中的当前元素,因为现在我基本上为每种类型的列表编写了三次相同的代码。我想知道如何为所有三个列表实现一个函数来执行此操作。我的主要问题是如何设置函数的参数,以便它可以打印出任何类型的ArrayList。
我想到的一个可能的解决方案是使ArrayLists保持静态,只是让函数接受一个int作为参数来指示正在显示的列表类型。我不确定是否将列表设置为静态是个好主意。
或者我只是在思考这个问题,我应该保持原样。我的主要方法是相当长的,所以我试图弄清楚如何简化其他方法。
答案 0 :(得分:0)
您应该在3个班级中override
使用toString()
方法。
然后在您的方法中,您只需loop
遍历每个对象,并调用toString
任何类型。
有关override
方法的更多信息,请参阅this主题,如果您还不知道该方法的话。
答案 1 :(得分:0)
我所有的toString方法确实是Overriden,但我想问的是如何将一个函数实现为任何类型的列表作为参数,换句话说
public void showList(List<Object> a) {
for (int i = 0; i < a.size(); i++) {
JOptionPane.showMessageDialog(null,a.get(i).toString());
}
}
当我调用该函数时,我可以指定它作为参数的列表类型,然后输入
List<Student> students = new ArrayList<Student>();
showList(students);
但是我确实意识到这是不可能的,但它有办法吗?
答案 2 :(得分:0)
如果你想要使用你的showList,你可以像这样修改它:
public void showList(List<Object> a) {
StringBuffer msg = new StringBuffer();
for (int i = 0; i < a.size(); i++) {
// generate a sequence
msg.append(a.get(i).toString() + ",");
}
// cut the last comma
msg = msg.substring(0,msg.length()-1);
JOptionPane.showMessageDialog(null,msg.toString());
}
我建议你为你的三个类创建一个基类,基类包含一个属性(Name)和两个方法(setName,getName)。 因此,您可以定义列表,例如列表,您不需要关心真实实体是否是学生,课程等。您只需调用getName like:entity.getName()即可获取列表的字符串值。