重寫 toString() 方法時列印預設值
一、簡介
我們可以使用 Java 中的toString()
方法傳回物件的字串表示形式。通常,它會被重寫以提供物件狀態的有意義的描述。但是,某些欄位可能為null
,列印它們可能會導致NullPointerExceptions
。
在本教程中,我們將探索使用預設值處理此場景的幾種方法。
2. Employee
用例場景
讓我們考慮開發一個管理員工記錄的應用程式。每位員工都有name
、 age
和department
等屬性:
public class Employee {
private String name;
private int age;
private String department;
public Employee(String name, int age, String department) {
this.name = name;
this.age = age;
this.department = department;
}
}
此外,在顯示員工資訊時,清晰且資訊豐富地表示每個Employee
物件也至關重要。
然而,在現實場景中,員工的姓名和部門屬性有時可能為null
,如果處理不當,會導致意外行為。
3. toString()
方法中的Null
檢查
最簡單的方法之一是在toString()
方法中對每個可能為null
欄位執行null
檢查。如果該欄位為null
,我們可以列印預設值。這是一個基本範例:
@Override
public String toString() {
return "Name: " + (name != null ? name : "Unknown") +
", Age: " + age +
", Department: " + (department != null ? department : "Unknown");
}
在這種方法中,當名稱或部門為null
時,我們會列印“Unknown”,以防止在Employee
物件的字串表示形式中顯示null
值。
4. 使用Optional
類別
Java 8引入了Optional
類,可以用來更優雅地處理null
值。
具體方法如下:
@Override
public String toString() {
return "Name: " + Optional.ofNullable(name).orElse("Unknown") +
", Age: " + age +
", Department: " + Optional.ofNullable(department).orElse("Unknown");
}
如果name
或department
為null
,我們使用Optional's orElse()
方法列印「 Unknown
」而不是null
。
5. 自訂輔助方法
建立自訂幫助器方法可以提高程式碼可讀性,特別是在需要檢查多個欄位是否為null
值的情況下。此外,此方法還可以封裝null
檢查和預設值賦值邏輯。
這是一個例子:
private String getDefaultIfNull(String value, String defaultValue) {
return value != null ? value : defaultValue;
}
在這裡,我們建立一個自訂幫助器方法getDefaultIfNull()
來處理null
值。此方法檢查該值是否為null
,如果為空則傳回預設值。
然後,在toString()
方法中,我們利用getDefaultIfNull()
方法來處理每個欄位的null
值:
@Override
public String toString() {
return "Name: " + getDefaultIfNull(name, "Unknown") +
", Age: " + age +
", Department: " + getDefaultIfNull(department, "Unknown");
}
6. 使用Objects.toString()
方法
Java 提供了一個實用方法Objects.toString()
來在將物件轉換為字串時處理null
值:
@Override
public String toString() {
return "Name: " + Objects.toString(name, "Unknown") +
", Age: " + age +
", Department: " + Objects.toString(department, "Unknown");
}
在這種方法中,如果名稱或department
欄位為null
,我們利用*Objects.toString()*方法列印「 Unknown
」而不是null
。
七、結論
在本文中,我們討論了重寫toString()
方法並處理其中潛在的null
。
與往常一樣,本文的完整程式碼範例可以在 GitHub 上找到。