自身类型(selftype)|学习笔记

简介: 快速学习自身类型(selftype)。

开发者学堂课程【Scala 核心编程-基础:自身类型(selftype)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/609/detail/9002


自身类型(selftype)

 

内容介绍

、说明

、应用案例

整理

 

一、说明

自身类型:主要是为了解决特质的循环依赖问题,比如将来 console它是一个类继承了一个类 Exception,混入一个特质 Logger。假如 Exception 是 a,Logger 是 b这两者要有相同的父类但是如果将来 a 和 b 它们类型之间是相互引用所以就形成循环依赖。同时可以确保特质在不扩展某个类的情况下,依然可以做到限制混入该特质的类的类型,Self-type

 

二、应用案例

举例说明自身类型特质,以及如何使用自身类型特质。

//Logger 就是自身类型特质

trait Logger {

//明确告诉编译器,我就是 Exception,如果没有这句话,下面的 getMessage 不能调用,直接给编译器进行标记这样就避免编译器在动态处理时才会发生循环依赖问题

this: Exception =>

def log():Unit ={

//既然我就是 Exception,那么就可以调用其中的方法

println(getMessage)

}

}

class Console extends Logger {} //对吗?

class Console extends Exception with Logger//对吗?

1、新建一个包Selftype 自身类型相当于自己告诉编译器我是谁

2、新建一个包,SelfTypeDemo,选择 Object

package com. atguigu. chapter08. selftype

; object SelfTypeDemo {

def main(args: Array[string]): Unit = {

}

}

//Logger 就是自身类型特质当这里做了自身类型后那么

//trait Logger  extends Exception 为了给编译器做说明,要求混入该特质的类也是 Exception 子类

trait Logger {

//明确告诉编译器,我就是 Exception, 如果没有这句话,下面的 getMessage 不能调用

this: Exception => 假设没有这句话这个方法用不了

def log(): Unit ={

//既然我就是 Exception, 那么就可以调用其中的方法

println(getMessage)

}

}

class Console extends Logger {} //对吗? 错误 Logger 是 Exception 子类,Console 不是 Exception 子类不能是继承了之后才是子类要求比原先的更严格

class Console extends Exception with Logger {} //对吗?  先继承 Exception再进行混入

作用是防止在混入时两者之间进行嵌套的使用

 

三、整理

1、说明

自身类型:主要是为了解决特质的循环依赖问题,同时可以确保特质在不扩展某个类的情况下,依然可以做到限制混入该特质的类的类型。

2、应用案例

举例说明自身类型特质,以及如何使用自身类型特质

package com. atguigu. chapter08. selftype

; object SelfTypeDemo {

def main(args: Array[string]): Unit = {

}

}

//Logger

//trait Logger  extends Exception

trait Logger {

//明确告诉编译器,我就是 Exception, 如果没有这句话,下面的 getMessage 不能调用

this: Exception => 

def log(): Unit ={

//既然我就是 Exception, 那么就可以调用其中的方法

println(getMessage)

}

}

class Console extends Logger {} //对吗? 错误 

class Console extends Exception with Logger {} //对吗?  

不要过多研究只需要记住语法记住如何用即可

相关文章
|
人工智能 算法 机器人
EMMA-X:新加坡科技设计大学推出具身多模态动作模型,使夹爪机器人具备空间推理和任务规划能力
EMMA-X是由新加坡科技设计大学推出的具身多模态动作模型,具备70亿参数,通过在链式思维推理数据上微调OpenVLA创建。该模型结合层次化的具身数据集,增强空间推理和任务规划能力。
457 3
EMMA-X:新加坡科技设计大学推出具身多模态动作模型,使夹爪机器人具备空间推理和任务规划能力
【SPSS】两独立样本的极端反应检验和两配对样本的非参数检验详细操作教程(附案例实战)
【SPSS】两独立样本的极端反应检验和两配对样本的非参数检验详细操作教程(附案例实战)
499 0
|
4天前
|
数据采集 人工智能 安全
|
13天前
|
云安全 监控 安全
|
5天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
1111 152
|
18天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1787 9
|
10天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
711 152
|
7天前
|
SQL 自然语言处理 调度
Agent Skills 的一次工程实践
**本文采用 Agent Skills 实现整体智能体**,开发框架采用 AgentScope,模型使用 **qwen3-max**。Agent Skills 是 Anthropic 新推出的一种有别于mcp server的一种开发方式,用于为 AI **引入可共享的专业技能**。经验封装到**可发现、可复用的能力单元**中,每个技能以文件夹形式存在,包含特定任务的指导性说明(SKILL.md 文件)、脚本代码和资源等 。大模型可以根据需要动态加载这些技能,从而扩展自身的功能。目前不少国内外的一些框架也开始支持此种的开发方式,详细介绍如下。
475 5