Java NullPointerException В классе конструктора - PullRequest
0 голосов
/ 25 марта 2012

Я создал класс 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 id и int time ), но я не понимаю, что Он имеет в виду.

1 Ответ

6 голосов
/ 25 марта 2012

Вы не создаете экземпляр List<Job> для обоих списков startBeforeStart и restricted - вы объявляете только переменную, которой присвоен нулевой указатель.

Таким образом, всякий раз, когда вы пытаетесь получить доступ к этому List [например: return restricted.size() != 0;] - вы пытаетесь разыменовать нулевой указатель - что вызывает ваш NPE.

Вы должны создать экземпляр List - используя оператор new [возможно, в конструкторе].

Взгляните на ArrayList и LinkedList и выберите, что лучше для вас.

Например, если вы используете ArrayList для обоих, ваш c'tor должен выглядеть примерно так:

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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...