java关于throw Exception的一个小秘密
生活随笔
收集整理的這篇文章主要介紹了
java关于throw Exception的一个小秘密
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 簡介
- throw小訣竅
- 總結
java關于throw Exception的一個小秘密
簡介
之前的文章我們講到,在stream中處理異常,需要將checked exception轉換為unchecked exception來處理。
我們是這樣做的:
static <T> Consumer<T> consumerWrapper(ThrowingConsumer<T, Exception> throwingConsumer) {return i -> {try {throwingConsumer.accept(i);} catch (Exception ex) {throw new RuntimeException(ex);}};}將異常捕獲,然后封裝成為RuntimeException。
封裝成RuntimeException感覺總是有那么一點點問題,那么有沒有什么更好的辦法?
throw小訣竅
java的類型推斷大家應該都知道,如果是 這樣的形式,那么T將會被認為是RuntimeException!
我們看下例子:
public class RethrowException {public static <T extends Exception, R> R throwException(Exception t) throws T {throw (T) t; // just throw it, convert checked exception to unchecked exception}}上面的類中,我們定義了一個throwException方法,接收一個Exception參數,將其轉換為T,這里的T就是unchecked exception。
接下來看下具體的使用:
@Slf4j public class RethrowUsage {public static void main(String[] args) {try {throwIOException();} catch (IOException e) {log.error(e.getMessage(),e);RethrowException.throwException(e);}}static void throwIOException() throws IOException{throw new IOException("io exception");} }上面的例子中,我們將一個IOException轉換成了一個unchecked exception。
總結
本文介紹了一種特殊的異常轉換的例子,大家可以參考一下。
本文的例子https://github.com/ddean2009/learn-java-streams/tree/master/rethrow-exception
更多精彩內容且看:
- 區塊鏈從入門到放棄系列教程-涵蓋密碼學,超級賬本,以太坊,Libra,比特幣等持續更新
- Spring Boot 2.X系列教程:七天從無到有掌握Spring Boot-持續更新
- Spring 5.X系列教程:滿足你對Spring5的一切想象-持續更新
- java程序員從小工到專家成神之路(2020版)-持續更新中,附詳細文章教程
歡迎關注我的公眾號:程序那些事,更多精彩等著您!
更多內容請訪問 www.flydean.com
總結
以上是生活随笔為你收集整理的java关于throw Exception的一个小秘密的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 8 lambda表达式中的异常
- 下一篇: java stream中Collecto