[英]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 id和int time ),但我不明白他的意思。
您不会同时为列表startBeforeStart
和restricted
List<Job>
创建List<Job>
的startBeforeStart
-您仅声明一个变量,该变量分配startBeforeStart
指针。
因此,每当您尝试访问此List
[例如: return restricted.size() != 0;
]-您正试图取消引用空指针-这会导致您的NPE。
您应该使用new
运算符[可能在构造函数中]创建List
的实例。
看一下ArrayList
和LinkedList
然后选择哪个更适合您。
例如,如果您过去都使用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.