在java构造函数中声明ArrayList

时间:2014-03-29 19:54:29

标签: java arraylist constructor

我正在研究一个项目,并且我被教导在构造函数中实例化变量。我在使用ArrayList思想时遇到了一些麻烦。您能否提出一些最佳实践,我是否需要使用实例变量定义ArrayList,或者我可以在构造函数中执行此操作。谢谢你的建议!我有一个我正在谈论的内容的例子:

//imports
import java.util.*;
import java.lang.*;

public class ArrayListConstructorDemo
{
//instance variables/attributes

String string;
List<String> list;// for example does this line need to say List<String> list = new ArrayList<String>();

//constructors
public ArrayListConstructorDemo()
{
    String string = "null";
    List<String> list = new ArrayList<String>();//is there anyway I can do this here instead of 6 lines up?
}//end default constructor
public ArrayListConstructorDemo(String string,List<String> list)
{
    this.string = string;
    this.list = list;
}//end generic constructor

//observers/getters/accessors
 public String getString(){return string;}//end method getString()
 public List<String> getList(){return list;}//end method getList()

//transformers/setters/mutators
     public void setTable(String string){this.string = string;}
     public void setValues(String list)
     {

    //  for(String s : test) 
    //  {
            list.add(this.list);
    //  }
     }
public String toString()
{
    return "this is a generic toString method for the class ArrayListConstructorDemo";
}//end toString

public static void main(String[] args)  
{
    ArrayListConstructorDemo alcd = new ArrayListConstructorDemo();
    System.out.println(alcd.list.size());

//test Lists in general
    List<String> bleh = new ArrayList<String>();
    bleh.add("b1");
    System.out.println(bleh.get(0));
}//end method main()
}//end class ArrayListConstructorDemo

6 个答案:

答案 0 :(得分:5)

更改

List<String> list = new ArrayList<String>();

list = new ArrayList<String>();

答案 1 :(得分:2)

如果你想在构造函数中声明它,那么你(很可能)想要声明外部字段,所以你想要:

list = new ArrayList<String>();

目前,您正在隐藏List<String> list类变量,这意味着您正在创建list实例,而不是正在初始化list实例变量。

我个人更喜欢在申报时初始化它,所以你以前拥有它。我更喜欢这样做,以使代码更简洁,如果你自学habbit,你最有可能不会忘记初始化它。

答案 2 :(得分:2)

如果你想在构造函数中声明它,你可以得到代码:

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

否则,您可以将其声明为字段,然后在构造函数中初始化它。

   private ArrayList<String> name;

然后在构造函数中:

    name = new ArrayList<String>();

使它成为一个字段会很有用,因为你可以创建accessor / mutator方法,以便从不同的类中检索和使用List,而不必将其公开(这很少是一件好事)。

答案 3 :(得分:2)

通常的做法是在构造函数之前声明,并在构造函数中初始化。 这是一个例子:
class myClass ArrayList<String> strings public myClass() { strings=new ArrayList<String>(); }

答案 4 :(得分:1)

java还为您提供了初始化字段

http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html请参阅初始化实例成员

答案 5 :(得分:1)

你怎么能这样做?

public void setValues(String list) {

    // for(String s : test)
    // {
    list.add(this.list);
    // }
}

没有类似add()的方法来操纵字符串,相反,你可以这样做:

public void setValues(List<String> list) {

    // for(String s : test)
    // {
    list.add(this.list);
    // }
}

关于在构造函数中声明ArrayList,你可以这样做:

String string;
List<String> list;// for example does this line need to say List<String>
                    // list = new ArrayList<String>();

// constructors
public ArrayListConstructorDemo() {
    string = "null";
    list = new ArrayList<String>();// is there anyway I can do this here
                                    // instead of 6 lines up?
}// end default constructor