本篇內容主要講解“Scala中如何實現Trait的調用鏈”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Scala中如何實現Trait的調用鏈”吧!
2.實現Trait的調用鏈
如果多個Ttrait都含有同一個方法,Scala的類繼承多個Trait后,支持調用所有父Trait的同一方法,只需要在方法最后調用super方法即可。
定義Trait為BaseChecker,兩個子Trait分別為
DataChecker校驗字段非空,
LengthChecker校驗字段長度是否合法
字段類Field 分別順序繼承兩個校驗類
package com.hadoop.ljs.spark.study.TraitTest/** * @author: Created By lujisen * @company ChinaUnicom Software JiNan * @date: 2020-02-15 16:45 * @version: v1.0 * @description: com.hadoop.ljs.spark.study.TraitTest */ trait BaseChecker{ /*這里有個知識點補充說明一下,如果checkResult()如果為抽象方法,繼承類在通過super.調用的時候,*/ /* 需要加上abstract 關鍵字,不然編譯會報錯*/ def checkResut(name:String): Unit ={ println("BaseChecker "+name) }}trait DataChecker extends BaseChecker { override def checkResut(name:String): Unit ={ println("DataChecker:數據不為空 "+name) //這里必須要調用super.checkResut() super.checkResut(name) }}trait LengthChecker extends BaseChecker { override def checkResut(name:String): Unit ={ println("LengthChecker:字段長度合法 "+name) //這里必須要調用super.checkResut() super.checkResut(name) }}class Field(data:String) extends LengthChecker with DataChecker { def printResult(): Unit ={ println("字段為:"+data) checkResut(data) }}
主函數測試類:
package com.hadoop.ljs.spark.study.TraitTest/** * @author: Created By lujisen * @company ChinaUnicom Software JiNan * @date: 2020-02-15 16:50 * @version: v1.0 * @description: com.hadoop.ljs.spark.study.TraitTest */object TraitChainTest { def main(args: Array[String]): Unit = { val field=new Field("field1") //這里按照繼承順序從右向左調用DataChecker、LengthChecker //,最后調用BaseChecker打印 field.printResult() }}
結果輸出為:
輸入字段為:field1DataChecker:數據不為空 field1LengthChecker:字段長度合法 field1BaseChecker field1
根據結果我們可以看出,這里函數printResult()會按照類Field的繼承順序,依次從右到左調用父Trait的統一函數checkResut(),最后才會調用BaseChecker中的函數checkResut(),這個特性我們可以用來做數據的校驗,不同的Trait實現不同的校驗分工。這里類似于java中的責任鏈模式的具體實現。
相關知識補充:
Java責任鏈模式:
顧名思義,責任鏈模式(Chain of Responsibility Pattern)為請求創建了一個接收者對象的鏈。這種模式給予請求的類型,對請求的發送者和接收者進行解耦。這種類型的設計模式屬于行為型模式。
在這種模式中,通常每個接收者都包含對另一個接收者的引用。如果一個對象不能處理該請求,那么它會把相同的請求傳給下一個接收者,依此類推。
到此,相信大家對“Scala中如何實現Trait的調用鏈”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。