Scala中如何实现Trait的调用链
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,本篇内容主要讲解"Scala中如何实现Trait的调用链",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Scala中如何实现Trait的调用链"吧!2.实现
千家信息网最后更新 2025年02月01日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安全错误
数据库的锁怎样保障安全
新服务器如何开启远程桌面
荣昌软件开发价格
智慧城市软件开发公司电话
网络安全法四十四条六十四条
图序数据库
数据库分组查询大于
服务器网管协议
浙江个人云服务器云空间
简答数据库的用途
无线网络技术软件
流式计算服务器
迅雷下载东西时会上传数据库
棋牌游戏服务器设计
学校网络安全员简答题
软件开发商的解释
插花视频软件开发
机械模拟软件开发
分布式应用和数据库应用
dbutils有哪些数据库
优刻得服务器可以退款吗
以色列计算机软件开发
河南精算互联网科技
通达oa更换服务器
世界网络安全日是哪天
有关网络安全的手抄报初一
龙岗网络技术有限公司
移动云服务器网络安全
长春云店网络技术有限公司
边锋网络技术有限公司在什么街道
信息网络安全法律状况