Scala中如何实现Trait的调用链
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,本篇内容主要讲解"Scala中如何实现Trait的调用链",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Scala中如何实现Trait的调用链"吧!2.实现
千家信息网最后更新 2025年12月03日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的调用链"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
字段
模式
方法
接收者
函数
合法
数据
责任
长度
顺序
不同
两个
内容
多个
对象
知识
类型
结果
学习
实用
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
pgsql导出某个数据库的脚本
网络安全c2等级
网页数据库有什么用
路由器的radius服务器ip是什么意思
网络技术推广岗位职责
批量合并gdb数据库一个图层
程序与软件开发的用人标准
英国尼尔森数据库
资源管理器访问服务器
c 软件开发项目描述
目前网络安全研究方向
方木网络安全小组
杭州微聚软件开发有限公司
人类产生的非结构化数据库
怎样让php连接数据库
csgo正在检索服务器信息卡死
守好网络安全三道防线
支付盒子软件开发
hp服务器增加硬盘分区
北京联合易网网络技术开发
行人视频数据库
北京智能软件开发维修价格
软件开发项目招标文档
洛阳理工学院软件开发实训
金融机构系统软件开发
在源头上堵住网络安全漏洞
批量导入表格到数据库发布到网站
c 软件开发项目描述
引用数据库中的文件
海康入侵检测服务器