温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Scala中如何实现Trait的调用链

发布时间:2021-12-08 15:21:48 来源:亿速云 阅读:156 作者: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