[英]Null pointer exception when testing in Java
public boolean isItMyName(String name)
{
name = fullname.substring(0,fullname.indexOf(' '));
...
}
然后,我的代碼會繼續下去。 當我運行它時,我得到一個空指針異常,並且錯誤指向此行。
我還創建了一個JUnit測試器,它在其中測試輸入是true還是false。
Name myName = new Name();
assertEquals(false, myName.isItMyName("Troll");
它還在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
類更改為僅具有名稱參數的構造函數,並確認它們不為null。 這樣,您永遠不會擁有無效的Name
對象,該對象的全名為null
。
編輯:現在您已經發布了更多的代碼,請看您的無參數構造函數和setName
方法:
public Name()
{
setName(fullname);
}
public void setName(String n)
{
fullname = n;
}
這意味着您的無參數構造函數等效於:
public Name()
{
fullname = fullname;
}
...即無人操作。 fullname
名將為null,因此是例外。
我的建議是完全擺脫無參數構造函數,並讓另一個驗證參數。
name = fullname.substring(0,fullname.indexOf(' '));
如果在該行上獲得空指針異常,則fullname
為null
。 這確實是唯一的可能性。
沒有更多的代碼,我不能肯定地說,但是我敢打賭,您的fullname
名為null,並且永遠不會設置為任何東西。
如果在全名中找不到''索引,則不會返回-1,從而導致子字符串獲取0,-1,這是空的...如果索引<0,則可能將其扔到if中並跳過該步驟...並且不應該輸入全名
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.