簡體   English   中英

如何在Java中以通用方式處理null檢查?

[英]How to handle null check in generic way in Java?

我必須檢查null條件是否有太多方法。 我該如何以通用方式而不是重復相同的步驟呢?還是可以寫?

這是我的代碼:

<Student>
 <Name></Name>
 <RollNumber></RollNumber>
</Student>

如果用戶為Name或RollNumber字段提供空值,則應該拋出異常。 我已經在下面編寫了代碼。 這可以正常工作,但我需要為這兩種情況編寫通用方法,並且應該與以下相同,

if(student.getName() == null) {
 System.out.println("Name is required to create Student Data");
}

if(student.getRollNumber() == null) {
 System.out.println("RollNumber is required to create Student Data");
}

注意:名稱是字符串,而RollNumber是整數

你能給我一個IDEA嗎?

這個問題可能已經在這里有了答案:避免在Java中使用“!= null”語句? 44個答案

我的問題是“我不想避免使用null語句。如果用戶提供null值,我們如何以通用方式引發異常?”

如果您的Student bean總是要求非空值,那么如何在構造函數中使用非空值構造Student對象。 當您在構造函數中進行驗證時,只要使用該對象,就不需要這樣做

public class Student
{
private String name;
private String rollNumber;

    public Student(String name, String rollNumber)
    {
        setName(name);
        setRollNumber(rollNumber);
    }   

    public String getName()
    {
        return name;
    }

    public String getRollNumber()
    {
        return rollNumber;
    }

    public String setName(String name)
    {
        if(isNull(name))
       {
         throw new NullPointerException("Name is required to create Student Data");
       }
       this.name= name;
    }

    public String setRollNumber(String rollNumber)
    {
        if(isNull(rollNumber))
       {
         throw new NullPointerException("Roll Number is required to create Student Data");
       }
       this.rollNumber = rollNumber 
    }

    private void isNull(String str)
    {
       if(str == null || str.trim().isEmpty())
          return true;
       return false;
    }

}

您可能應該看看Hibernate Validation 然后,您可以簡單地使用@NotNull注釋bean的字段。

另外,您還可以處理其他驗證。

您可以使用Apache Commons String Utils API,該API定義對String的安全為空的操作。

您可以執行以下操作:

if (StringUtils.isEmpty(student.getName()) { //this check for both empty String and null and prevents null pointer exceptions

     System.out.println("Name is required to create Student Data");

}

除了僅對字符串進行空值比較外, Assertions是處理nulls好方法,您可以在此處查看更多信息。 確保將-ea參數傳遞給JVM,因為默認情況下它會忽略Assertions

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM