Java NullPointerException在构造函数的类中

时间:2012-03-25 11:22:38

标签: java nullpointerexception

我已经创建了一个Java类,我已经定义了一个构造函数和一些方法,但是我得到了一个N​​ullPointer异常,我不知道如何修复它。

public class Job {

    String idJob;
    int time;
    int timeRun;
    Job j1;

    List<Job> startBeforeStart;
    List<Job> restricted;

    Job(String idJob, int time){
        this.idJob=idJob;
        this.time=time;

    }


    public boolean isRestricted() {
        return restricted.size() != 0;
    }

    public void startsBeforeStartOf(Job job){
            startBeforeStart.add(job);
            job.restricted.add(this);
    }

    public void startsAfterStartOf(Job job){
            job.startsBeforeStartOf(this);
    }

    public void checkRestrictions(){

        if (!isRestricted()){
            System.out.println("+\n");
            }
        else{
            Iterator<Job> itR = restricted.iterator();
            while(itR.hasNext()){
                 Job j1 = itR.next();
                 if(time>timeRun){
                     System.out.println("-\n");
                     time--;
                 }
                 else {
                     restricted.remove(j1);
                 }
            }
        }
    }






    @Override
    public boolean equals(Object obj) {
        return obj instanceof Job && ((Job) obj).idJob.equals(idJob);
    }



     public void run() {
         timeRun++;
     }



}

PS 在一个论坛中,用户说要修复错误我应该在构造函数中创建一个ArrayList(不修改应该保留的接收参数 String id int time ),但我不明白他的意思。

1 个答案:

答案 0 :(得分:6)

您没有为列表List<Job>startBeforeStart创建restricted的实例 - 您只声明一个赋值为null的变量。

因此,每当您尝试访问此List [例如:return restricted.size() != 0;]时 - 您正试图取消引用空指针 - 这会导致您的NPE。

您应该使用List运算符[可能在构造函数中]创建new的实例。

查看ArrayListLinkedList并选择哪个更适合您。

例如,如果你使用ArrayList作为两者,你的c'tor应该是这样的:

Job(String idJob, int time){
    this.idJob=idJob;
    this.time=time;
    startBeforeStart = new ArrayList<Job>();
    restricted= new ArrayList<Job>();

}