为什么对对象使用 getter returns NullPointerException

Why do using a getter for an object returns NullPointerException

我正在尝试对一个对象使用 getter,以便将该对象的信息存储在另一个对象中。然而,仅通过使用 getter,它立即 returns 一个 NullPointerException。

这是将对象作为字段的 class(以及 getter)的代码:

public class NodoAnos implements Serializable
{
private int ano;
private NodoAnos proximo;
private ListaEquipos equipos;

public NodoAnos(int año) 
{
    this.ano = año;
    this.proximo = null;
    this.equipos = new ListaEquipos();
}

public int getAno() 
{
    return ano;
}

public void setAno(int año) 
{
    this.ano = año;
}

public ListaEquipos getEquipos()
{
    return equipos;
}

以下是 NullPointerException 之前的所有方法(代码示例 6 中的异常):

代码示例 1:

private void informacion() throws IOException, FileNotFoundException, ClassNotFoundException
{
    int ano = elegirAnoPopup(); //SEE CODE SAMPLE NUMBER 2
    NodoAnos nodAno = new NodoAnos(ano);

    nodAno = anos.buscarAños(nodAno); //SEE CODE SAMPLE NUMBER 5

    datosComboBoxUniversidad(nodAno); //SEE CODE SAMPLE NUMBER 6
}

代码示例 2:

private int elegirAnoPopup() throws IOException, FileNotFoundException, ClassNotFoundException
{
    NodoAnos aux = new NodoAnos(1);
    List<String> choices = new ArrayList<>();

    anos = anos.leerArchivo(anos); //SEE CODE SAMPLE NUMBER 3

    while(aux != null)
    {
        aux = anos.llenarDialogo(aux); //SEE CODE SAMPLE NUMBER 4

        if(aux != null)
            choices.add(Integer.toString(aux.getAno()));
    }

    ChoiceDialog<String> dialog = new ChoiceDialog<>("Elegir año",choices);
    dialog.setTitle("Consultar Informacion");
    dialog.setHeaderText("Por favor, introduzca la informacion requerida");
    dialog.setContentText("Introduzca el año a consultar:");

    Optional<String> result = dialog.showAndWait();
    return Integer.parseInt(result.get());
}

代码示例 3:

public ListaAnos leerArchivo(ListaAnos anos) throws FileNotFoundException, IOException, ClassNotFoundException
{
    ListaAnos lista = anos;

    try
    {
        FileInputStream fis = new FileInputStream("lista.DAT");
        ObjectInputStream ois = new ObjectInputStream(fis);

        if(ois != null)
        {
            ListaAnos objeto = (ListaAnos) ois.readObject();
            lista = objeto;

            ois.close();
        }
    }
    catch(FileNotFoundException e)
    {
        System.out.println("No existe un archivo");
    }

    return lista;
}

代码示例 4:

public NodoAnos llenarDialogo(NodoAnos aux)
{
    if(aux.getAno() == 1)
        aux = cabeza;
    else
        aux = aux.getProximo();

    return aux;
}

代码示例 5:

public NodoAnos buscarAños(NodoAnos nodAño)
{
    NodoAnos aux = cabeza;

    while(aux != null)
    {
        if( nodAño.getAno() == aux.getAno() )
        {
            return aux;
        }
        else
        {
            aux = aux.getProximo();
        }
    }

    return null;
}

代码示例编号 6:

private void datosComboBoxUniversidad(NodoAnos nodAno)
{
    ListaEquipos listaEquipo = new ListaEquipos();
    NodoEquipos nodEquipo = new NodoEquipos(null, 0, 0);

    listaEquipo = nodAno.getEquipos(); //NULLPOINTEREXCEPTION

    while(nodEquipo != null)
    {
        nodEquipo = listaEquipo.buscarEquipos(nodEquipo);

        if(nodEquipo != null)
        {
            comboUniversidad.getItems().add(nodEquipo.getUniversidad());
        }
    }

}

重要说明:nodAno 不是 Null。已经确定了。它打印如下:torneodetenis.NodoAnos@12539123

您在 nodAno 中传递的参数必须为空。在 Java 中,在空对象上调用方法将导致 NullPointerException.

避免这些问题的小提示:如果您使用 IntelliJ IDEA 或类似的 IDE,您可以将 @NotNull 注释添加到您的参数和 IDE 如果您将可能为 null 的对象传递给需要非 null 值的方法调用,则会发出警告。您可以在此处阅读更多相关信息:https://www.jetbrains.com/idea/help/nullable-and-notnull-annotations.html