2015-02-08 24 views
0

所以我正在爲一所大學編寫註冊系統應用程序(用JAVA編寫)我有三門課程學生,教師和課程。在驅動程序類中,我有三個每種類型的ArrayLists來存放這些類型的不同對象。我需要一個選項來打印出列表中的當前元素,因爲現在我基本上爲每種類型的列表編寫了三次相同的代碼。我想知道如何實現一個函數來爲所有三個列表執行此操作。我的主要問題是如何設置函數的參數,以便打印出任何類型的ArrayList。如何使用函數來顯示列表中的元素當你有三種不同類型的列表

我想到的一個可能的解決方案是將ArrayLists設置爲靜態,並且只需將函數以int形式作爲參數來指示顯示的是哪種類型的列表。我不確定這是否是一個好主意,但使列表靜態。

還是我只是過度這個,我應該保持原樣。我的主要方法變得很長,但我試圖弄清楚如何用其他方法來簡化。

回答

0

您應該在您的3個班級的每個班級中使用overridetoString()方法。

然後在您的方法中,您只需在每個對象上輸入loop,然後調用toString即可。

請參閱this線程獲取更多關於如何在override方法的信息,如果您還不知道如何。

0

我所有的toString方法確實覆蓋,但是我想要問的是我將如何實現任何類型的列表作爲參數的函數,換句話說

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); 

不過我也知道這是不可能的,但有沒有辦法解決它?

+0

您無法在循環中添加JOptionPane。因爲當尺寸非常大時,你的應用將被打破。 – MageXellos 2015-02-08 04:26:55

0

如果stiil想用你的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()); 
} 

我建議你創建一個基類的三個類和基礎類包含一個屬性(名稱)和兩個方法(setName,getName)。 所以你可以像列表一樣定義你的列表,你不需要關心真正的實體是學生,課程等等。您只需調用getName,如:entity.getName()來獲取列表的字符串值。

相關問題