我正在尝试进行这个java练习,但是我收到一个NullPointerException,我无法理解为什么
public class CV
{
private String nome;
private HashSet<Pubblicazione> pubblicazioni;
public CV(String nome)
{
this.nome = nome;
}
public void aggiungiPubblicazione(Pubblicazione pub)
{
pubblicazioni.add(pub);(*)
}
public String getNome(){return nome;}
public HashSet<Pubblicazione> getPubblicazioni(){ return pubblicazioni; }
}
public class ProfEvaluator
{
private CV curriculum;
public ProfEvaluator(CV curriculum){ this.curriculum = curriculum; }
public static void main(String[] args)
{
CV cv = new CV("Mario Rossi");
cv.aggiungiPubblicazione(new Pubblicazione("pub1",10, "Mario Rossi", "Luigi Bianchi", "Giuseppe Verdi")); (*)
cv.aggiungiPubblicazione(new Pubblicazione("pub2",10, "Mario Rossi", "Giuseppe Verdi"));
}
}
输出结果为:
Exception in thread "main" java.lang.NullPointerException
at CV.aggiungiPubblicazione(CV.java:18)
at ProfEvaluator.main(ProfEvaluator.java:53)
我已经使用eclipse进行了调试,并且没有NullPointers。 在标有(*)的行中抛出异常(错误消息指示的行是错误的'因为我只粘贴了我认为与错误有关的程序部分。
答案 0 :(得分:5)
你确实有空指针。您在实例化之前尝试访问pubblicazioni
。
您可以添加到构造函数:
public CV(String nome)
{
this.nome = nome;
this.pubblicazioni = new HashSet<>();
}
正如@ZouZou所说:
如果您不处理Java 7,请将= new HashSet<>();
替换为= new HashSet<Pubblicazione>();
答案 1 :(得分:2)
在向其添加值之前初始化您的HashSet pubblicazioni
。
答案 2 :(得分:2)
您需要在使用之前初始化pubblicazioni
:
public CV(String nome)
{
this.nome = nome;
this.pubblicazioni = new HashSet<Pubblicazione>();
}