将对象列为类字段

时间:2014-03-12 11:48:45

标签: java

我想将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);
    }
}

我猜这段代码应该会导致错误 如何更改代码以使其具有与正确语法类似的结果?

如果此代码不会导致错误,任何人都可以告诉我何时(在执行程序的哪个部分)将创建静态数据对象? 附:我不打算创建容器对象,只想在程序中多次调用container.setData(String a)方法。

3 个答案:

答案 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 :(得分:1)

我引用:“原因是我想在程序的不同部分多次调用setData方法,并且每次必须将数据添加到相同的对象数据,而不是不同的。”

如果您的数据字段声明为static,则只会有一个数据字段,因此这不会造成任何问题。您是否测试了代码,或者只是认为会出现错误?

答案 2 :(得分:1)

如果您添加了缺少的new字词,那么您的代码就可以使用,它可以根据需要使用。加载container类时,将实例化ArrayList。当控制流到达引用此类的类时,通常会发生这种情况。因此,无论何时调用这些方法中的任何一个,数据字段都已准备就绪。

但是,您可能希望学习“singleton design pattern”,如果您create several threads(或者使用为您执行此操作的库),您可能希望同步对共享对象的访问权限。< / p>

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);
    }
}