如何创建List的对象<integer>类型</integer>

时间:2012-04-09 15:42:13

标签: java generics static

我无法创建和使用对象来键入List<Integer>。当我运行以下代码时,我得到NullPointerException,因为对象未初始化

import java.util.List;

public class RBTree {

    public static class Tree {
        public List<Integer> parent;
        public List<Integer> right;
        public List<Integer> left;
        public List<Integer> data;
        public List<Boolean> black;
    }

    public static void main (String[] args){
        Tree rb =new Tree();                
        rb.data.add(-1);
        rb.left.add(-1);
        rb.right.add(-1);
        rb.parent.add(-1);
        rb.black.add(Boolean.TRUE);
    }
}

除非我将static添加到public static class Tree行,否则编译器也会给我错误,但我不希望Treestatic,即不可变。我需要能够像C中的struct那样使用或多或少的树。

3 个答案:

答案 0 :(得分:5)

到目前为止,您只创建了一个引用,没有底层对象。请尝试以下方法:

public List<Integer> parent = new ArrayList<Integer>();
// etc.

答案 1 :(得分:2)

static嵌套类型声明中的

public static class表示可以在Tree实例的上下文之外创建RBTree个对象。您的错误与static无关:您获得了NPE,因为您的列表未已初始化。您可以在Tree的构造函数中添加初始化,也可以添加initializer

答案 2 :(得分:1)

您忘了创建实际的列表对象:

public List<Integer> parent = new ArrayList<Integer>();
public List<Integer> right = new ArrayList<Integer>();
public List<Integer> left = new ArrayList<Integer>();
public List<Integer> data = new ArrayList<Integer>();
public List<Boolean> black = new ArrayList<Boolean>();

如果你不这样做,那么你的列表为null并访问一些不存在的属性或方法会产生NullPointerException。