2014-03-12 32 views
0

我想將List對象設置爲類字段,然後使用ArrayList()作爲List的具體類。 原因是我想在程序的不同部分多次調用setData方法,每次必須將數據添加到相同的對象數據,而不是不同的數據。列表對象作爲類字段

下面是代碼:

import java.util.ArrayList; 
import java.util.List; 

public class container { 
    private static List<String> data = ArrayList<String>(); 

    public static List<String> getData() { 
     return data; 
    } 
    public static void setData(String a) { 
     data.add(a); 
    } 
} 

我想這個代碼應該引起錯誤。
如何更改代碼以使其具有正確語法的相似結果?

如果這段代碼不會導致錯誤,任何人都可以告訴我什麼時候(在執行程序的哪個部分)會創建靜態數據對象嗎? P.S.我不打算創建容器對象,只是想在程序中多次調用container.setData(String a)方法。

+6

爲什麼你認爲會出現錯誤? – Maroun

+4

向ArrayList添加一個類型說明符:new ArrayList () – blueygh2

+2

事實上 - 對於您來說,嘗試*這很簡單,然後在您的問題中包含具體的錯誤,如果確實有一個。 –

回答

1

如果您添加缺少的new字,您的代碼將正常工作,並且它將按您的需要工作。 ArrayList將在加載container類時實例化。當控制流達到引用此類的類時,通常會發生這種情況。所以每當你調用這些方法時,數據字段都已經準備就緒。

然而,你可能想了解「singleton design pattern」,你可能希望將訪問共享對象同步,如果你create several threads(或者您使用的爲你做一個庫)。

import java.util.ArrayList; 
import java.util.List; 

public class container { 
    private static List<String> data = new ArrayList<String>(); // <-- new was missing 

    public static List<String> getData() { 
     return data; 
    } 
    public static void setData(String a) { 
     data.add(a); 
    } 
} 
+0

謝謝!!第二個非常有用的答案。 –

1

測試如下:

import java.util.ArrayList; 
import java.util.List; 

public class container { 
private static List<String> data = new ArrayList<String>(); 
//    for java 1.5-1.6 point type here ^^^^^^^ 
//    for java 1.7+ you can use new ArrayList<>(); 
public static List<String> getData() { return data;} 
public static void setData(String a) { data.add(a);} 
} 
1

我舉:「原因是,我想打電話給SetData方法多次在程序和每一個它必須將數據添加到同一個對象的數據,而不是不同時間的不同部分那些。」

如果您的數據字段被聲明爲static,那麼只會有一個數據字段,所以這不會造成任何問題。你有沒有測試過代碼,還是你認爲會出現錯誤?

+0

謝謝。第一個有用的答案。不,我沒有測試代碼,我認爲這會導致邏輯錯誤,並檢查這個錯誤將花費太多時間,所以我在這裏問了解,以瞭解有經驗的編碼人員的意見。 –

相關問題