2010-06-10 92 views
2

如果我想創建一個將人員添加到List的表單,我如何從另一個類訪問該List?我在哪裏定義該列表,以便其他類可以訪問成員,大小等?例如,如果我有具有用於我的表單的GUI的Class Foo,以及用於向List添加和刪除人員的按鈕,那麼將List聲明爲Class Foo的私有實例變量是有意義的。但是,如果我有另一個類Class Bar,它如何獲取當前在該List中的值來更新其他圖形組件?或者是一般地聲明List的錯誤地方?謝謝。有權訪問Java中其他類的私有變量

回答

2

其他班級不應該觸摸列表。他們應該向Foo詢問關於該列表的信息,此時Foo可以與其私人列表交談。

+0

你能舉一個例子說明如何工作嗎?我想我很困惑,因爲我只聲明瞭一個Foo類型的對象,然後如果我有一個返回List大小的函數,我將不得不從Bar類創建一個新對象來使用成員函數getSize right ? – Crystal 2010-06-10 04:37:40

+0

爲什麼Bar不會使用Foo的現有實例? – 2010-06-10 04:41:32

+0

Bar如何使用在另一個類中創建的實例? – Crystal 2010-06-10 04:46:46

0

你不應該讓他們直接訪問私有變量(實際上外部類甚至不會看到它)。

要給/修改列表信息,Foo類應該有方法與私有列表進行交互。例如,你可以有一個名爲getSize()的方法,它將返回列表的大小。

+0

我假設在第一句中有'沒有'缺失 – 2010-06-10 04:46:15

+0

你說得對。我做了改變。 – Pran 2010-06-10 15:19:53

0

在最簡單的情況下,使用一個getter函數:

然後其他對象可以直接在列表上進行操作。更面向對象,包列表訪問方法在你的對象,並不會直接返回列表對象,如:

Object getItemFromList (int i) { return list.get(i); } 
1

正如我在my answer to your previous question說,我不認爲數據的列表所屬在gui組件中。我認爲你應該有一個應用程序核心,一個服務,如果你想,你可以使用gui組件,而不需要耦合兩者。

這樣就可以在不更改核心應用程序代碼的情況下創建Web客戶端,命令行客戶端,SWT客戶端等。你只需寫一個新的GUI並在那裏注入服務。一個GUI應該可以訪問服務,但不能成爲一個。