我一直在研究这个问题。我继续在下面的函数中得到一个空指针异常,myProfile变量是对另一个类的引用,该类在开始时被声明为私有UserProfile myProfile,其中UserProfile是原始类,我相信这是我遇到的地方问题:
public void saveProfile()
{
if ((myProfile!=(null)) && !(myProfile.getName().isEmpty()))
{
profiles.put(myProfile.getName(), myProfile);
}
}
答案 0 :(得分:3)
如果您myProfile
不是null
,请使用调试器检查myProfile.getName()
返回的内容。如果返回null,则无法在空引用上调用isEmpty
。
答案 1 :(得分:1)
只要有点(.
),就有可能出现空指针异常。例如,您检查myProfile
是否为空,但在尝试对myProfile.getName()
执行.isEmpty()
之前,您不会检查profiles
是否为空。
同样,如果.put()
为null,则在调用{{1}}时会出现空指针异常。
答案 2 :(得分:1)
修改您的代码如下。它不会导致异常
public void saveProfile(){
if ((myProfile!=null) && (myProfile.getName() != null) &&!(myProfile.getName().isEmpty())){
profiles.put(myProfile.getName(), myProfile);
}
}
答案 3 :(得分:0)
public void saveProfile()
{
if (myProfile!=null && myProfile.getName()!=null && !myProfile.getName().isEmpty())
{
if(profiles==null)
profiles = makeAnInstanceOfProfiles();
profiles.put(myProfile.getName(), myProfile);
}
}
使用测试代码(启用断言运行):
public void saveProfile()
{
assert(myProfile!=null):"null at myprofile";
assert(myProfile.getName()!=null):"null at myprofile/getName";
assert(profiles!=null) : "profiles is null";
if (myProfile!=null && myProfile.getName()!=null && !myProfile.getName().isEmpty())
{
if(profiles==null)
profiles = makeAnInstanceOfProfiles();
profiles.put(myProfile.getName(), myProfile);
}
}