我已经创建了一个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 ),但我不明白他的意思。
答案 0 :(得分:6)
您没有为列表List<Job>
和startBeforeStart
创建restricted
的实例 - 您只声明一个赋值为null的变量。
因此,每当您尝试访问此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>();
}