网站建设资讯

NEWS

网站建设资讯

Scala中如何实现Trait的调用链

本篇内容主要讲解“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的调用链”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


当前文章:Scala中如何实现Trait的调用链
标题链接:http://cdweb.net/article/gioijo.html