方法執行成功回傳 true,失敗回傳 false 並攜帶異常細節(如驗證錯誤、業務異常)。
| 方案 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
| 自訂 Result 物件 | 型別安全、可攜帶任意資料、可擴展 | 需定義額外類別 | 企業級專案、統一錯誤處理 |
Vavr Try<T> / Either<L, R> | 函數式風格、鏈式操作、無副作用 | 引入第三方庫、學習曲線 | 函數式導向專案 |
Map<String, Object> 或 Object[] | 無需新類別、快速原型 | 型別不安全、鍵名易拼錯、維護困難 | 臨時腳本、舊代碼改造 |
| Out 參數(傳入可變容器) | 不改變回傳型別 | 破壞純函數、執行緒不安全、易誤用 | 極少數效能敏感場景 |
public class Result<T> {
private boolean success;
private T data;
private String errorCode;
private String errorMsg;
// getter/setter、靜態工廠方法 success(T), fail(code, msg)
}
// 使用範例
public Result<User> login(String username, String password) {
if (valid) return Result.success(user);
return Result.fail("AUTH_001", "帳號或密碼錯誤");
}
ClassCastException。result.onSuccess(u -> ...).onFail(e -> ...)。若專案已引入 Vavr,Try.of(() -> riskyOperation()) 也是優雅選擇。