我无法创建和使用对象来键入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
行,否则编译器也会给我错误,但我不希望Tree
为static
,即不可变。我需要能够像C中的struct
那样使用或多或少的树。
答案 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。