当您有三种不同类型的列表时,如何使用函数显示列表的元素

时间:2015-02-08 03:54:24

标签: java list class arraylist

所以我正在为一所大学编写一个注册系统应用程序(用JAVA编写)我有三个班级学生,教师和课程。在驱动程序类中,我有三个每种类型的ArrayLists来保存所述类型的不同对象。我需要一个选项来打印列表中的当前元素,因为现在我基本上为每种类型的列表编写了三次相同的代码。我想知道如何为所有三个列表实现一个函数来执行此操作。我的主要问题是如何设置函数的参数,以便它可以打印出任何类型的ArrayList。

我想到的一个可能的解决方案是使ArrayLists保持静态,只是让函数接受一个int作为参数来指示正在显示的列表类型。我不确定是否将列表设置为静态是个好主意。

或者我只是在思考这个问题,我应该保持原样。我的主要方法是相当长的,所以我试图弄清楚如何简化其他方法。

3 个答案:

答案 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()即可获取列表的字符串值。