重寫 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 上找到。