NullPointerException,无法理解为什么

时间:2013-05-01 14:00:55

标签: java nullpointerexception

我正在尝试进行这个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。 在标有(*)的行中抛出异常(错误消息指示的行是错误的'因为我只粘贴了我认为与错误有关的程序部分。

3 个答案:

答案 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>();
}