2013-05-09 116 views
10

你好,我是在Java初學者,這是我的問題: 我有以下變量。這家一流:Java - 如何訪問另一個類的ArrayList?

import java.util.ArrayList; 

public class numbers { 
    private int number1 = 50; 
    private int number2 = 100; 
} 

我有這個類太:

import java.util.ArrayList; 

public class test { 
    private numbers number; 
} 

我的問題這裏是:我想將數字1 & number2變量存儲到ArrayList中,然後從類test中訪問此ArrayList。我怎樣才能做到這一點?

+2

@ alex23 - 我不同意。它解決了一個特定的編程問題,這對於SO來說非常好。基本?是。但我沒有看到任何問題。 – 2013-05-09 12:53:43

+1

(** 1 **)聲明並初始化您的'ArrayList '。使用'add'方法將'number1'和'number2'放在那裏。 (** 2 **)爲此ArrayList創建一個「公共Getter」方法。 (** 3 **)使用'Getter'方法來檢索你的ArrayList。 – 2013-05-09 12:58:18

+0

@ alex23工作代碼?我實際上正在和一個班級成員一起開展一個項目,而且這個項目的價值是零分,與我的計算機科學課無關,這是我們想要做的事情,如果它是一個我們不會去尋求在線幫助的項目,我們的教授不是愚蠢的,他可以搞清楚。此外,有關這一特殊問題的在線信息很少。好事不是所有的人都像你一樣,感謝所有其他人。 – 2013-05-09 13:05:17

回答

17
import java.util.ArrayList; 
public class numbers { 
    private int number1 = 50; 
    private int number2 = 100; 
    private List<Integer> list; 

    public numbers() { 
     list = new ArrayList<Integer>(); 
     list.add(number1); 
     list.add(number2); 
    } 

    public List<Integer> getList() { 
     return list; 
    } 
} 

,並且測試類:

import java.util.ArrayList; 
public class test { 
    private numbers number; 

    //example 
    public test() { 
    number = new numbers(); 
    List<Integer> list = number.getList(); 
    //hurray ! 
    } 
} 

+0

通常最好通過List接口引用ArrayList對象。 – 2013-05-09 13:03:57

+0

您不會將對象投射到不同的實現。使用List作爲字段和返回值的類型允許您更改實現而不更改使用它的代碼。最好使用接口作爲默認接口,除非使用具體類的具體要求,而不是相反。 – 2013-05-09 13:13:03

1

兩種方式

1)實例化first class和getter爲arrayList

2)使的ArrayList爲static

最後

Java Basics By Oracle

+1

我更喜歡第一種方法。 – Maroun 2013-05-09 12:53:28

+0

@MarounMaroun yea.me。 – 2013-05-09 12:54:48

3

您可以通過在類別numbers中提供:

  • 一種返回ArrayList對象本身的方法。
  • 返回ArrayList的不可修改包裝的方法。這可以防止在不知道類號的情況下對列表進行修改。
  • 提供您想要通過班級號碼支持的一組操作的方法。這使得班級號碼可以控制所支持的一組操作。

順便說一句,有一個強大的慣例,即Java類名是大寫的。

情況1(簡單的吸氣劑):

public class Numbers { 
     private List<Integer> list; 
     public List<Integer> getList() { return list; } 
     ... 
} 

情況2(不可修改的包裝器):

public class Numbers { 
     private List<Integer> list; 
     public List<Integer> getList() { return Collections.unmodifiableList(list); } 
     ... 
} 

情況3(具體方法):

public class Numbers { 
     private List<Integer> list; 
     public void addToList(int i) { list.add(i); } 
     public int getValueAtIndex(int index) { return list.get(index); } 
     ... 
} 
+0

在第三種情況下,告訴其他人關於列表大小是有用的,這樣他們就不會嘗試訪問超出其大小的元素,也許是'getSize'方法?而不是不可修改的列表,你可以簡單地返回它的副本。 – user5539357 2016-03-20 19:42:48

+0

@ user5539357 - 是的,在情況3下,'size()'是有用的。但是,在情況2中,返回列表的不可修改視圖是O(1),而複製將是O(n)。上面的實現留下了複製給調用者的選擇和成本。 – 2016-03-20 22:14:38

3

你可以做到以下幾點:

public class Numbers { 
    private int number1 = 50; 
    private int number2 = 100; 
    private List<Integer> list; 

    public Numbers() { 
     list = new ArrayList<Integer>(); 
     list.add(number1); 
     list.add(number2); 
    } 

    int getNumber(int pos) 
    { 
     return list.get(pos); 
    } 
    } 

    public class Test { 
    private Numbers numbers; 

    public Test(){ 
     numbers = new Numbers(); 
     int number1 = numbers.getNumber(0); 
     int number2 = numbers.getNumber(1); 
    } 
    } 
1

,把它們放進一個ArrayList的在你的第一類,如:

import java.util.ArrayList; 
public class numbers { 
private int number1 = 50; 
private int number2 = 100; 

public ArrayList<int> getNumberList() { 
ArrayList<int> numbersList= new ArrayList<int>(); 
numbersList.add(number1); 
numberList.add(number2); 
.... 
return numberList; 

} 
} 

然後,在你的測試類中,你可以調用numbers.getNumberList()來獲取你的arrayList。另外,您可能希望在數字類中創建像addToList/removeFromList這樣的方法,以便您可以按照需要的方式處理它。

您也可以從另一個簡單地訪問一個類中聲明的變量一樣

numbers.numberList; 

如果您有它宣稱那裏上市。

但在我看來,這不是一個很好的做法,因爲您可能需要稍後在代碼中修改此列表。 請注意,您必須將您的課程添加到導入列表中。

如果你能告訴我你的應用需求是什麼,我可以更精確地告訴你我認爲最好做什麼。