如何访问java中类构造函数内的数组列表?

时间:2013-11-20 01:25:22

标签: java collections

我构建了一个Purse类,其中包含以下内容:

public Purse(){
    ArrayList<String> coins = new ArrayList();
}

我向对象添加字符串的功能:

public void addCoin(String coinName){
    coins.add(coinName);
}

这个想法是每个Purse对象都可以包含一个字符串列表。但是,我无法使用我的方法访问ArrayList<String> coins

例如,我写这个方法来反转字符串的顺序

public void reverse(){
    for (int j = coins.size() - 2; j > -1; j--){
        coins.add(coins.get(j));
        coins.remove(j);
}

调用无法找到符号coins的错误。

如何使我的方法可以访问我在构造函数中创建的数组列表?对于this.coins.add(coinName)方法,我需要说void addCoin,或者对于反向方法,我需要说this.coins.add(this.coins.get(j))吗?

3 个答案:

答案 0 :(得分:3)

您需要在构造函数之外移动coins的声明:

private List<String> coins;
public Purse(){
    coins = new ArrayList<String>();
}

这会使coins成为您班级的私有字段,使其可以从Purse的所有非静态方法访问。目前,您正在创建一个局部变量coins,当构造函数退出时,该变量将无法访问。

答案 1 :(得分:2)

ArrayList声明为构造函数之外的字段。也可以使用List界面代替ArrayList

public class Purse{

    private List<String> coins= new ArrayList<String>();

    public Purse(){

    }
}

在构造函数内部声明时,列表的范围仅限于构造函数方法。声明为类中的字段,类{}内的所有方法都可以访问List

答案 2 :(得分:0)

通过在构造函数中声明coins变量,您将变量置于构造函数块的本地。一旦你在块之外,就不再可以访问coins变量了。

因此,将coins声明为Purse类的实例变量。

例如:

public class Purse {
    private List<String> coins; 
    public Purse() {
        coins = new ArrayList<String>();
    }
}