成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Scala的構(gòu)造方法與重載的一些思考

開(kāi)發(fā) 后端
本文介紹了在Scala中定義新異常類(lèi)型的一些考慮。Scala的構(gòu)造方法非常靈活,但隨之而來(lái)的是重載構(gòu)造方法的麻煩。

51CTO編輯推薦:Scala編程語(yǔ)言專(zhuān)題

Scala的構(gòu)造方法非常靈活(具體怎么個(gè)靈活法這里不多說(shuō)了),但隨之而來(lái)的是重載構(gòu)造方法的麻煩。

Scala的構(gòu)造方法:重載的麻煩

例如定義新異常類(lèi)型。一般來(lái)說(shuō),自己定義的異常都屬于checked異常,大都從Exception繼承過(guò)來(lái),所以也大都需要定義多個(gè)構(gòu)造方法。如果用Java來(lái)定義,沒(méi)什么好說(shuō)的,重載就行,但是用Scala的話(huà)就有點(diǎn)麻煩。Scala規(guī)定所有重載的構(gòu)造方法都必須調(diào)用或間接調(diào)用默認(rèn)構(gòu)造方法,所以必須使用如下的方法。

  1. MyException(message: String, cause: Throwable) extends Exception(message, cause) {  
  2.   def this(message: String): = this(message, null)  
  3.   def this(cause: Throwable): = this(null, cause)  
  4.   def this: = this(nullnull)  
  5. }  

當(dāng)然,這樣是可以工作的,但是仔細(xì)看看Throwable的實(shí)現(xiàn)就會(huì)發(fā)現(xiàn)如果傳入的cause為null話(huà)會(huì)導(dǎo)致異常棧的丟失。而且最?lèi)盒牡氖荰hrowable沒(méi)有提供相應(yīng)的setter/getter,我們能做的就是調(diào)用構(gòu)造方法。

所以我就想出了下面的怪招。

  1. object SpcException {  
  2.   def apply(message: String, cause: Throwable): Exception =  
  3.     (new SpcException1(message, cause)).asInstanceOf[Exception]  
  4.    
  5.   def apply(message: String): Exception =  
  6.     (new SpcException2(message)).asInstanceOf[Exception]  
  7.    
  8.   def apply(cause: Throwable): Exception =  
  9.     (new SpcException3(cause)).asInstanceOf[Exception]  
  10.    
  11.   def apply(): Exception =  
  12.     (new SpcException4).asInstanceOf[Exception]  
  13. }  
  14.    
  15. trait SpcException  
  16.    
  17. class SpcException1(message: String, cause: Throwable)  
  18.     extends Exception(message, cause) with SpcException  
  19.    
  20. class SpcException2(message: String)  
  21.     extends Exception(message) with SpcException  
  22.    
  23. class SpcException3(cause: Throwable)  
  24.     extends Exception(cause) with SpcException  
  25.    
  26. class SpcException4 extends Exception with SpcException  

基本思想是定義一個(gè)trait,然后定義四種異常,每種都從該trait擴(kuò)展并提供不同的默認(rèn)構(gòu)造方法,同時(shí)定義一個(gè)singleton,提供四種不同的apply方法用來(lái)構(gòu)造四種不同的異常。這樣就可以解決之前的問(wèn)題,雖然不怎么好看。

以上就是對(duì)Scala的構(gòu)造方法定義異常的一些考慮。本文來(lái)自Honnix的博客:《我是如何用Scala定義新異常類(lèi)型的》

【編輯推薦】

  1. Scala編程語(yǔ)言
  2. Scala和Clojure,以及優(yōu)秀的企業(yè)級(jí)語(yǔ)言之道
  3. Scala IDE支持現(xiàn)狀報(bào)告:三大巨頭面面相覷
  4. Scala的優(yōu)點(diǎn)與缺陷:深沉而有趣的繼承者
  5. Scala和Erlang,以及多核主導(dǎo)的未來(lái)
責(zé)任編輯:yangsai 來(lái)源: Honnix的博客
相關(guān)推薦

2009-06-25 09:50:32

JSF

2020-02-03 16:03:36

疫情思考

2011-11-30 15:57:18

2015-09-14 08:57:20

設(shè)計(jì)設(shè)計(jì)師

2018-06-29 14:51:41

Java健壯性實(shí)踐

2020-07-14 09:23:49

安全運(yùn)營(yíng)甲方乙方

2018-07-11 14:06:04

數(shù)據(jù)質(zhì)量數(shù)據(jù)治理數(shù)據(jù)清洗

2017-09-01 12:48:34

DevSecOps安全運(yùn)維

2017-12-21 07:54:07

2019-09-17 09:21:01

2013-04-19 10:01:19

jQueryJS

2018-06-14 09:35:35

2011-08-01 10:37:29

軟件項(xiàng)目管理

2021-06-10 10:02:19

優(yōu)化緩存性能

2009-09-24 09:41:00

Scala講座Scala

2019-08-26 11:03:32

互聯(lián)網(wǎng)研發(fā)落地

2018-07-23 12:03:01

2024-10-28 09:02:12

2009-08-27 11:02:22

JavaScript事

2024-12-27 10:51:53

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 高清一区二区视频 | 日本aⅴ中文字幕 | 欧美精品一区二区三区在线四季 | 国产精品国产精品国产专区不卡 | 国产精品视频播放 | 国产一区二区三区精品久久久 | 亚洲免费视频网址 | 亚洲国产91 | 久久99精品久久 | 国产成人久久av免费高清密臂 | 午夜影院在线观看视频 | 美国一级片在线观看 | 午夜二区 | 亚洲视频一区二区 | 九九精品在线 | 久久久久久中文字幕 | 国产精品久久久久久妇女 | 亚洲综合二区 | 午夜电影福利 | 精品久久久久久久久久久久久久 | 成人免费看黄 | 国产精品久久久久久二区 | 在线看日韩 | 久久久久国产一区二区三区四区 | 一区二区三区高清在线观看 | 国产一区免费视频 | 精品久久久久久久久久久 | 精品欧美乱码久久久久久1区2区 | 99精品国产一区二区三区 | 国产欧美一区二区三区在线看 | 一级大片免费 | 午夜网| 久久成人国产精品 | 成年视频在线观看 | 欧美日韩精品中文字幕 | 国产91久久精品一区二区 | 国产精品一区二区在线免费观看 | 欧美福利三区 | a级大片免费观看 | 日韩精品一区二区三区中文在线 | av大片|