2014-05-02 23 views
1

是否有可能從不同的類中獲取靜態數組列表的副本。我試圖從不同的課程訪問數組列表,並且總是得到一個空列。我是在假設,我們可以直接訪問靜態變量...複製不同類別​​靜態數組列表的內容?

基本上我想獲得的東西已添加到它的arraylist的副本。我怎樣才能做到這一點?

import java.util.ArrayList;   

    public class two { 

     public static void main(String[] args) { 
      // TODO Auto-generated method stub 

      ArrayList<Integer> two = one.getTemp(); 

      for (int i = 0; i < two.size(); i++) { 

       System.out.println(two.get(i)); 

      }    
     }   
    } 

import java.util.ArrayList; 

public class one { 

    public static ArrayList<Integer> temp = new ArrayList<Integer>(); 

    public static ArrayList<Integer> getTemp() { 

     return temp; 
    } 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     for (int i = 0; i < 10; i++) { 

      temp.add(i * 10); 

     } 

     for (int i = 0; i < 10; i++) { 

      System.out.println(temp.get(i)); 

     } 

     while (true) { 

     } 
    }  
} 
+1

你試圖調用哪個'main'方法? – prasanth

+0

我將首先運行一個,並嘗試將arraylist從一個變成兩個...... – linuxWiz89

+0

Java程序將只運行一個'main()'方法。所以你要麼把某些東西放入'ArrayList'中,要麼你得到'ArrayList'。 – awksp

回答

0

要初始化在main方法的ArrayList和想使用第二類,但是從一個類的ArrayList是ArrayList中,當你調用此方法主要將初始化,然後你不能在二班使用。做一個static塊,如果你想在get方法調用的時候初始化此

import java.util.ArrayList; 
public class Two { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     System.out.println(One.temp); 
     ArrayList<Integer> copy=One.temp; 
     One.temp.add(100); 
     System.out.println(copy); 
    } 

} 
class One{ 
    public static ArrayList<Integer> temp = new ArrayList<Integer>(); 

    public static ArrayList<Integer> getTemp() { 

     return temp; 
    } 

    static { 
      // TODO Auto-generated method stub 

      for (int i = 0; i < 10; i++) { 

       temp.add(i * 10); 
      } 

     } 
} 

輸出:

[0, 10, 20, 30, 40, 50, 60, 70, 80, 90] 
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 

在二班的對象淺拷貝正在發生的事情,所以當您在任何改變靜態數組列表會自動顯示在第二課的列表中。

+0

基本上我想在添加東西之後得到數組列表的副本。我怎樣才能做到這一點? – linuxWiz89

+0

你想在哪裏複製這個? –

+0

分成兩個陣列。我希望如果我一直在調用getter方法,那麼該列表中的任何更改都應該顯示在列表中... – linuxWiz89

0

您可以直接訪問任何類的static組件。

在您的示例中,靜態temp數組列表爲空。沒有設置任何數據。

當呼叫one.getTemp()時,它返回數組列表的默認靜態實例。在這個方法中,你應該檢查它是否被填充。如果爲空,則應填寫並返回。

方式很多,但這是其中之一。