如何只创建一次实例变量?

时间:2015-10-24 21:21:27

标签: java arraylist

我有一个预定项目ArrayList的课程,在本例中为水果。在我的代码中,我有一个构造函数调用一个填充我的列表的方法。

问题是每次实例化此类的实例时,都会重新填充列表。如何创建和填充列表一次?

public class Test {    
    ArrayList<String> lst = new ArrayList<String>();

    public Test() {
        populate();
    }

    public void populate() {
        lst.add("Apple");
        lst.add("Banana");
    }
}

4 个答案:

答案 0 :(得分:5)

您可以将其设为static,并使用static initialization block。我也更喜欢编程到List界面,我会使用菱形运算符<>。像,

public class Test {
    private static List<String> lst = new ArrayList<>();
    static {
        lst.add("Apple");
        lst.add("Banana");
    }
    public Test() {
        // ...
    }
}

,使用Arrays.asList(T...)并删除像

这样的初始化块
public class Test {
    private static List<String> lst = Arrays.asList("Apple", "Banana");
    public Test() {
        // ...
    }
}

答案 1 :(得分:2)

您可以将static与static block一起使用。

public class Test {

    static ArrayList<String> lst = new ArrayList<String>();

    static {
        populate();
    }

    public static  void populate() {
        lst.add("Apple");
        lst.add("Banana");
    }

}

加载课程时会调用一次。

答案 2 :(得分:2)

你可以创建单例类

public class MyClass{

   private static MyClass instance;

   private ArrayList<String> lst;

   private MyClass(){
      lst = new ArrayList<String>();
      lst.add("Apple");
      lst.add("Banana");
   }

   public static MyClass getInstance(){
      if(instance == null){
          instance = new MyClass();
      }

      return instance;
   }
}

答案 3 :(得分:0)

看看单身人士模式 你在这里得到许多简单的信息: http://www.javaworld.com/article/2073352/core-java/simply-singleton.html

取决于这种情况,我可以和你的班级一起尝试一次:

public class TestClass {

    private static TestClass instance = null;

    ArrayList<String> lst = new ArrayList<String>();

    protected TestClass () {
        populate();
    }

    public static TestClass getInstance(){
        if(instance == null) 
            instance = new TestClass();

        return instance;
    }

    public void populate() {
        lst.add("Apple");
        lst.add("Banana");
    }

}

所以如果你想创建OR获取类,运行getInstance()方法而不是构造函数(你甚至无法运行构造函数,因为它受到保护) 注意:我没有测试代码,但它看起来很好,如果有任何问题或进一步的问题,我仍然可以运行它来修复它们,只是评论然后或让我知道它是否有效/解决了你的问题