我有一个预定项目ArrayList
的课程,在本例中为水果。在我的代码中,我有一个构造函数调用一个填充我的列表的方法。
问题是每次实例化此类的实例时,都会重新填充列表。如何创建和填充列表一次?
public class Test {
ArrayList<String> lst = new ArrayList<String>();
public Test() {
populate();
}
public void populate() {
lst.add("Apple");
lst.add("Banana");
}
}
答案 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()方法而不是构造函数(你甚至无法运行构造函数,因为它受到保护) 注意:我没有测试代码,但它看起来很好,如果有任何问题或进一步的问题,我仍然可以运行它来修复它们,只是评论然后或让我知道它是否有效/解决了你的问题