public boolean isItMyName(String name)
{
name = fullname.substring(0,fullname.indexOf(' '));
...
}
然后我的代码继续下去。当我运行它时,我得到一个空指针异常并且错误指向这一行。
我还创建了一个 JUnit 测试器,用于测试输入是真还是假。
Name myName = new Name();
assertEquals(false, myName.isItMyName("Troll");
它还在 assertEquals(false, myName.isItMyName("Troll")); 处给我一个空指针异常
我已经无计可施了。我该如何解决?
@格雷格休吉尔:
在我的 Name 类中,我这样做:
public class Name(String n)
{
name = n;
}
但在我的主要方法中,我传入了字符串:Name myName = new Name("Johnathy");
所以字符串不为空。
全名:
public class EmailAddress {
private String address;
public EmailAddress(String a)
{
address = a;
}
public String toString()
{
return address;
}
最佳答案
好吧,你忽略了你的参数......你在第一行中为 name
分配了一个新值。这意味着您的方法几乎肯定从一开始就被破坏了。
然后考虑 fullname
(我假设它是一个实例变量)的来源。除非您在无参数构造函数中将其设置为一个值,否则默认情况下它将为 null
。这真的是你想要的吗?
我建议您将Name
类更改为仅 具有采用名称参数的构造函数,并且验证它们不为空。这样你就永远不会有一个无效的 Name
对象,其中全名是 null
。
编辑:现在您已经发布了更多代码,请查看您的无参数构造函数和 setName
方法:
public Name()
{
setName(fullname);
}
public void setName(String n)
{
fullname = n;
}
这意味着您的无参数构造函数等同于:
public Name()
{
fullname = fullname;
}
...即空操作。 fullname
将为空,因此异常。
我的建议是完全摆脱无参数构造函数,让另一个构造函数验证参数。
关于java - Java测试时出现空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7780908/