返回 null 值,基本上是在給本身增長工做量,也是給調用者添亂。只有一處沒有檢查返回的是否爲 null,程序就會拋 NullPointerException 異常。php
若是你打算在方法中返回 null 值,不如:api
以下的一段代碼:wordpress
List<Employee> employees = getEmployees();
if (employees != null) {
for (Employee employee : employees) {
totalPay += employee.getPay();
}
}
之因此這樣處理,天然 getEmployees() 可能返回 null,不妨對 getEmployees 函數作進一步的封裝:函數
public List<Employee> getNoNullEmployees() {
List<Employee> employees = getEmployees();
if (employees == null) {
return Collections.emptyList();
}
return employees;
}
該模式的類圖以下:spa
特例類一樣繼承自普通基類,只是其封裝的是異常處理。code
咱們將以下兩種不友好的(返回 null 或特殊值的異常處理),改造爲特例類的處理方式:對象
// 不要返回 null
class MissingCustomer implements Customer {
public Long getId() {
return null;
}
}
// 不要返回特殊值
class MissingCustomer implements Customer {
public Long getId() {
return 0;
}
}
而是採用以下的方式(拋出有意義的特殊異常):blog
class MissingCustomer implements Customer {
public Long getId() throws MissingCustomerException {
throw new MissingCustomerException();
}
}
特例類封裝了異常處理,有時當異常發生時,咱們並不想讓程序直接崩潰退出,而是繼續運行下去。此時在特例類中,還需給出當異常狀況發生時,特例實例的異常處理方式:繼承
class MissingSprite implements Sprite {
public void draw() {
// draw nothing or a generic something.
}
}