无法解释NullPointerException

时间:2010-03-24 08:30:04

标签: java nullpointerexception

在下面的代码中,我有一种方法可以获得具有相同星座的Vector个人。 persoaneVector<Persoana>。我在if条件下不断获得NullPointerExceptionpersoane绝对不为空)。我无法理解为什么。任何帮助将不胜感激

public Vector<Persoana> cautaDupaZodie(String zodie)
{
    Vector<Persoana> rezultat= new Vector<Persoana>();

    for(int i=0; i<persoane.size(); i++)
    {
        if(persoane.get(i).getData().getZodie().equals(zodie)) //the exception occurs here
        {
            rezultat.add(persoane.get(i));
        }

    }

    return rezultat;
}

7 个答案:

答案 0 :(得分:5)

当您尝试在NullPointerException Object上调用某个方法时,会出现

null

这意味着以下其中一项返回null

  • get(i)
  • getData()
  • getZodie()

逐个添加它们以找出导致异常的实际原因。

答案 1 :(得分:2)

persoane.get(i).getData().getZodie()

将其分成几行,以查看NPE发生的位置。

另外,请考虑使用for-each循环。

for (Persoana persoana: rezultat){
    ...
}

答案 2 :(得分:1)

getData()getZodie()返回null

答案 3 :(得分:1)

您可以添加一些“跟踪”代码:

public Vector<Persoana> cautaDupaZodie(String zodie)
{
    Vector<Persoana> rezultat= new Vector<Persoana>();

    for(int i=0; i<persoane.size(); i++)
    {
        System.err.println(persoane.get(i));
        System.err.println(persoane.get(i).getData());
        System.err.println(persoane.get(i).getData().getZodie());
        if(persoane.get(i).getData().getZodie().equals(zodie)) //the exception occurs here
        {
            rezultat.add(persoane.get(i));
        }

    }

    return rezultat;
}

答案 4 :(得分:1)

可以是以下任何一种:

  • persoane在任何索引中都包含null
  • persoane的任何元素都会为null
  • 返回getData()
  • 任何getData()结果都为null
  • 重新getZodie()

为了进一步调查,您最好分解该方法链并添加条件断点。另外,重新考虑你的设计 - 这种“深度嵌套,无行为的数据结构操作的方法”对于这个和其他原因是不好的。

答案 5 :(得分:1)

首先,如果可能,您应该使用List<Person>。然后,我建议将方法链分解为较小的步骤,以查看哪个确切的步骤失败。

public List<Person> searchZodiac(String zodiac) {
    assert zodiac != null; // if it fails here, zodiac == null

    List<Person> result = new ArrayList<Person>();

    for (Person p : persons) {
        Data d = p.getData();      // if it fails here, p == null
        String z = d.getZodiac();  // if it fails here, d == null
        if (z.equals(zodiac)) {    // if it fails here, z == null
           result.add(p);
        }
    }

    return result;
}

答案 6 :(得分:1)

if(persoane.get(i).getData().getZodie().equals(zodie))

将上面的行分成几个部分。这里getData必须返回null,因此你得到NullPointerException