2015-03-02 40 views
0
public class Employee            
{ 
private String name; 
private String department; 


private ArrayList<Employee>job= new ArrayList(); 

//只想補充getter和setter用於此ArrayListArrayList的getter和setter的級Java

public void setJob(Employee j) 
{ 
job.add(j); 

//這是我的二傳手

我希望能夠增加後來通過擴展列表表達式儘可能多地處理'工作'

+1

那麼你的問題是什麼? – childofsoong 2015-03-02 23:10:40

+0

只想知道如何在我的課堂中設置setter和getter,謝謝 – 2015-03-02 23:11:32

+0

您可以通過簡單地調用您的'setJob'方法來添加儘可能多的,但是getter應該返回什麼?第一個員工?最後一名員工?員工的「可迭代」? – 2015-03-02 23:24:45

回答

2

對於集合或數組,通常使用addJob,removeJob和getJobs而不是get/set對。

+0

是否意味着我不能使用setters和getters? – 2015-03-02 23:14:56

+0

這是練習的一部分,以便進行測試,所以我需要使用setters和getters,謝謝 – 2015-03-02 23:20:10

+0

你可以做任何你喜歡的事情,沒有規則,只有指導。 – 2015-03-09 18:39:38

3

雖然你可以有setter和List類型的getter,你應該仔細考慮它們的實現,因爲大多數列表是可變的。例如,假設您想驗證jobs列表不是空的。

public void setJob(List<Employee> jobs) { 
    if (jobs.isEmpty()) throw new RuntimeException(); 
    this.job = jobs; 
} 

現在下面的代碼生成一個員工沒有工作:

Employee e = ...; 
e.setJobs(jobs); 
jobs.clear(); 
//the employee now has no jobs :-(

您可以通過一個defensive copy

public void setJob(List<Employee> j) { 
    this.job = new ArrayList<>(j); 
} 

這同樣適用於吸氣避免此問題。如果要實現它:

public List<Employee> getJobs() { 
    return this.jobs; 
} 

您允許呼叫者修改私有作業列表而不調用相應的setter:myEmployee.getJobs().clear()

在這種情況下,您可能會返回一個不可修改的列表,而不是返回內部對象。

public List<Employee> getJobs() { 
    return java.util.Collections.unmodifiableList(this.jobs); 
}  
+0

非常感謝您的幫助, – 2015-03-03 06:45:43