有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

构造函数类中的Java NullPointerException

我创建了一个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),但我不明白他的意思


共 (1) 个答案

  1. # 1 楼答案

    您没有为列表startBeforeStartrestricted创建List<Job>指令-您只声明了一个变量,该变量被赋值为空指针

    因此,每当你试图访问这个List[例如:return restricted.size() != 0;]时,你都在试图去引用一个空指针——这会导致你的NPE

    应该使用new操作符(可能在构造函数中)创建List的实例

    看看^{}^{},然后选择哪个更适合你

    例如,如果您使用ArrayList来表示这两种情况,那么您的任务应该是:

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