一種處理checked exception的方法

一種處理checked exception的方法


在網上看到的一種處理異常的方法

public abstract class Try<V> {private Try() {}public abstract Boolean isSuccess();public abstract Boolean isFailure();public abstract void throwException();public abstract Throwable getMessage();public abstract V get();public abstract <U> Try<U> map(CheckedFunction<? super V, ? extends U> f);public abstract <U> Try<U> flatMap(CheckedFunction<? super V, Try<U>> f);public static <V> Try<V> failure(Throwable t) {Objects.requireNonNull(t);return new Failure<>(t);}public static <V> Try<V> success(V value) {Objects.requireNonNull(value);return new Success<>(value);}public static <T> Try<T> failable(CheckedSupplier<T> f) {Objects.requireNonNull(f);try {return Try.success(f.get());} catch (Throwable t) {return Try.failure(t);}}private static class Failure<V> extends Try<V> {private RuntimeException exception;public Failure(Throwable t) {super();this.exception = new RuntimeException(t);}@Overridepublic Boolean isSuccess() {return false;}@Overridepublic void throwException() {throw this.exception;}@Overridepublic V get() {throw exception;}@Overridepublic Boolean isFailure() {return true;}@Overridepublic <U> Try<U> map(CheckedFunction<? super V, ? extends U> f) {Objects.requireNonNull(f);return Try.failure(exception);}@Overridepublic <U> Try<U> flatMap(CheckedFunction<? super V, Try<U>> f) {Objects.requireNonNull(f);return Try.failure(exception);}@Overridepublic Throwable getMessage() {return exception;}}private static class Success<V> extends Try<V> {private final V value;public Success(V value) {super();this.value = value;}@Overridepublic Boolean isSuccess() {return true;}@Overridepublic void throwException() {return;}@Overridepublic V get() {return value;}@Overridepublic Boolean isFailure() {return false;}@Overridepublic <U> Try<U> map(CheckedFunction<? super V, ? extends U> f) {Objects.requireNonNull(f);try {return Try.success(f.apply(value));} catch (Throwable t) {return Try.failure(t);}}@Overridepublic <U> Try<U> flatMap(CheckedFunction<? super V, Try<U>> f) {Objects.requireNonNull(f);try {return f.apply(value);} catch (Throwable t) {return Try.failure(t);}}@Overridepublic Throwable getMessage() {throw new IllegalStateException("no messages when success");}}
}

使用樣例:

    Try<StringBuffer> _try = Try.failable(() -> {FileReader fileReader = new FileReader("test.txt");StringBuffer stringBuffer = new StringBuffer();int c = fileReader.read();while (c != -1) {stringBuffer.append((char) c);c = fileReader.read();}fileReader.close();return stringBuffer;});System.out.println(_try.get());

原文鏈接:
Why Try? Better Exception Handling in Java With Try

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/13961.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13961.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/13961.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【UE HTTP】“BlueprintHTTP Server - A Web Server for Unreal Engine”插件使用記錄

1. 在商城中下載“BlueprintHTTP Server - A Web Server for Unreal Engine”插件 該插件的主要功能有如下3點&#xff1a; &#xff08;1&#xff09;監聽客戶端請求。 &#xff08;2&#xff09;可以將文件直接從Unreal Engine應用程序提供到Web。 &#xff08;3&#xff…

Antd Vue項目引入TailwindCss之后出現svg icon下移,布局中的問題解決方案

目錄 1. 現象&#xff1a; 2. 原因分析&#xff1a; 3. 解決方案&#xff1a; 寫法一&#xff1a;擴展Preflight 寫法二&#xff1a; 4. 禁用 Preflight 1. 現象&#xff1a; Antd Vue項目引入TailwindCss之后出現svg icon下移&#xff0c;不能對齊顯示的情況&#xff0…

k8s筆記 | Prometheus安裝

kube-prometheus 基于github安裝 選擇對應的版本 這里選擇 https://github.com/prometheus-operator/kube-prometheus/tree/release-0.11 下載修改為國內鏡像源 image: quay.io 改為 quay.mirrors.ustc.edu.cn image: k8s.gcr.io 改為 lank8s.cn 創建 prometheus-ingres…

在AndroidStudio創建虛擬手機DUB-AI20

1.DUB-AI20介紹 DUB-AL20是華為暢享9全網通機型。 華為暢享9采用基于Android 8.1定制的EMUI 8.2系統&#xff0c;最大的亮點是配置了1300萬AI雙攝、4000mAh大電池以及AI人臉識別功能&#xff0c;支持熄屏快拍、笑臉抓拍、聲控拍照、手勢拍照等特色的拍照功能&#xff0c;支持移…

Windows安裝mingw32/w64

1.下載 MinGW-w64 WinLibs - GCCMinGW-w64 compiler for Windows Releases niXman/mingw-builds-binaries (github.com) MinGW-w64、UCRT 和 MSVCRT 是 Windows 平臺上常用的 C/C 運行庫&#xff0c;它們有以下不同點&#xff1a; MinGW-w64&#xff1a;是一個基于 GCC 的…

Edge瀏覽器報錯:Ref A Ref B: Ref C

今天發現微軟Edge瀏覽器非常頻繁的出現以下報錯&#xff1a;Ref A: 0BF6B9E03845450C8E6A6C31006AD7B9 Ref B: BJ1EDGE1116 Ref C: 2024-05-23T12:41:30Z 通過搜索發現用如下問題解決&#xff1a; 1.打開Edge瀏覽器 2.進入設置選項 3.找到隱私、搜索和服務 4.關閉跟蹤防護后面…

【數據結構】【C語言】堆~動畫超詳細解讀!

目錄 1 什么是堆1.1 堆的邏輯結構和物理結構1.2 堆的訪問1.3 堆為什么物理結構上要用數組?1.4 堆數據上的特點 2 堆的實現2.1 堆類型定義2.2 需要實現的接口2.3 初始化堆2.4 銷毀堆2.5 堆判空2.6 交換函數2.7 向上調整(小堆)2.8 向下調整(小堆)2.9 堆插入2.10 堆刪除2.11 //堆…

微服務項目收獲和總結---第2,3天(分庫分表思想,文章業務)

①分庫分表思想 文章表一對一為什么要拆分&#xff1f;因為文章的內容會非常大&#xff0c;查詢效率會很低&#xff0c;我們經常操作文章的基本信息&#xff0c;不會很經常查詢文章內容。充分發揮高頻數據的操作效率。 ②freemarker和minIO 由于文章內容數據量過大&#xff0c…

git clone 出現的問題

問題: core源碼ref新API % git clone https://github.com/xxxx.git Cloning into core... remote: Enumerating objects: 58033, done. remote: Counting objects: 100% (1393/1393), done. remote: Compressing objects: 100% (750/750), done. error: 432 bytes of body are …

辦公自動化-Python如何提取Word標題并保存到Excel中?

辦公自動化-Python如何提取Word標題并保存到Excel中&#xff1f; 應用場景需求分析實現思路實現過程安裝依賴庫打開需求文件獲取word中所有標題去除不需要的標題創建工作簿和工作表分割標題功能名稱存入測試對象GN-TC需求標識符存入測試項標識存入需求標識符 完整源碼實現效果學…

Nginx學習與使用記錄

這里寫自定義目錄標題 定義域名&#xff08;本地&#xff09;Nginx的一下常用命令記錄win系統使用 .bat來啟動nginx配置 定義域名&#xff08;本地&#xff09; 本地定義域名不需要證書&#xff0c;直接更改hosts文件。 注意&#xff1a;在這個文件夾中是無法更改hosts文件的&…

Vue02-黑馬程序員學習筆記

一、今日學習目標 1.指令補充 指令修飾符v-bind對樣式增強的操作v-model應用于其他表單元素 2.computed計算屬性 基礎語法計算屬性vs方法計算屬性的完整寫法成績案例 3.watch偵聽器 基礎寫法完整寫法 4.綜合案例 &#xff08;演示&#xff09; 渲染 / 刪除 / 修改數量 …

一個簡約高級視差效果PR動態圖文開場視頻模板

這是一個高質量且易于定制的pr模板。具有模塊化結構&#xff0c;可以輕松更改內容。包括視頻教程&#xff0c;即使是新手小白也可以輕松套用模板制作視頻。 主要特點&#xff1a; 水平&#xff08;19201080&#xff09;和垂直&#xff08;10801920&#xff09;分辨率&#xff…

c語言:利用隨機函數產生20個[120, 834] 之間互不相等的隨機數, 并利用選擇排序法將其從小到大排序后輸出(每行輸出5個)

利用隨機函數產生20個[120, 834] 之間互不相等的隨機數&#xff0c; 并利用選擇排序法將其從小到大排序后輸出&#xff08;每行輸出5個&#xff09; 代碼如下&#xff1a; #include <stdio.h> #include <time.h> #include <stdlib.h> int shenchen(int a[…

三維模型相互轉換(obj文件轉inp文件)

三維模型文件根據其含義都是可以進行相互轉換的&#xff0c;這里主要介紹obj文件轉化為inp文件。 什么是inp文件&#xff1f; inp文件是以.inp為后綴的文本文件&#xff0c;它包括了模型的全部數據信息&#xff0c;ABAQUS求解器分析的對象是inp文件&#xff0c;軟件生成的.ca…

PHP身份證真偽驗證、身份證二、三要素核驗、身份證ocr接口

實名認證有利于網絡綠化&#xff0c;所以在互聯網發展迅速的今天&#xff0c;實名認證成了“剛需”。而OCR與實名認證兩種產品的結和更是擦出了美麗的火花。翔云人工智能開放平臺提供的實名認證OCR接口良好的展現出兩種功能結合的效果。以身份實名認證產品舉例來說&#xff0c;…

AI智能體|扣子Coze“圖像流”功能速覽

大家好&#xff0c;我是無界生長。 AI智能體&#xff5c;扣子Coze“圖像流”功能速覽Coze提供易上手的圖像處理工作流&#xff0c;包含智能生成、智能編輯和基礎編輯三類節點&#xff0c;旨在通過AI技術簡化圖像處理過程。本文對扣子Coze“圖像流”功能做了簡單介紹&#xff0…

【qt】初識模型和視圖

模型和視圖 一.模型和視圖的概念1.關系2.模型3.數據4.視圖5.特點 二.文件系統模型1.那種數據&#xff1f;2.界面拖放3.創建模型4.模型設置數據5.視圖設置模型6.模型索引7.模型操作數據①文件名②文件大小③文件類型④是否是目錄⑤文件路徑 三.字符串鏈表模型1.那種數據&#xf…

論Promise在前端江湖的地位及作用

系列文章&#xff1a; 先擼清楚&#xff1a;并發/并行、單線程/多線程、同步/異步 論Promise在前端江湖的地位及作用 前言 上篇文章闡述了并發/并行、單線程/多線程、同步/異步等概念&#xff0c;這篇將會分析Promise的江湖地位。 通過本篇文章&#xff0c;你將了解到&#x…

100base-tx、100base-fx的區別

100表示網線設計的頻率&#xff0c;單位MHz。值越大&#xff0c;網線的速度越快。baseBASEband的縮寫&#xff0c;基帶t物理介質是雙絞線纜f物理介質是光纖x同一個傳輸效率下的多種不同的標準 T表示雙絞線&#xff0c;base-tx是運行超五類雙絞線的快速以太網端口&#xff0c;全…