繁体   English   中英

Java NullPointerException在构造函数的类中

[英]Java NullPointerException In the constructor's class

我做了一个Java类,其中定义了一个构造函数和一些方法,但是却收到NullPointer异常,而且我不知道如何解决它。

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 idint time ),但我不明白他的意思。

您不会同时为列表startBeforeStartrestricted List<Job>创建List<Job>startBeforeStart -您仅声明一个变量,该变量分配startBeforeStart指针。

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

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

看一下ArrayListLinkedList然后选择哪个更适合您。

例如,如果您过去都使用ArrayList ,则您的c'tor应该类似于:

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

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM