-1

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

4

3 回答 3

5

确实有一个空指针。pubblicazioni您在实例化它之前尝试访问。

您可以添加到构造函数:

public CV(String nome)
{
    this.nome = nome;
    this.pubblicazioni = new HashSet<>();
}

正如@ZouZou 所说:

如果您不处理 Java 7,请替换= new HashSet<>();= new HashSet<Pubblicazione>();

于 2013-05-01T14:01:45.487 回答
2

pubblicazioni在向其添加值之前初始化您的 HashSet 。

于 2013-05-01T14:02:39.957 回答
2

使用前需要初始化pubblicazioni

public CV(String nome)
{
    this.nome = nome;
    this.pubblicazioni = new HashSet<Pubblicazione>();
}
于 2013-05-01T14:03:07.680 回答