溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Scala中如何實現Trait的調用鏈

發布時間:2021-12-08 15:21:48 來源:億速云 閱讀:188 作者:iii 欄目:大數據

本篇內容主要講解“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的調用鏈”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女