类型转换和最佳实践|学习笔记

简介: 快速学习类型转换和最佳实践。

开发者学堂课程【Scala 核心编程-基础:类型转换和最佳实践】学习笔记,与课程紧密联系,让用户快速学习知识。

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


类型转换和最佳实践

 

内容介绍

一、基本介绍

二、最佳实践

 

一、基本介绍

要测试某个对象是否属于某个给定的类,可以用 islnstanceOf 方法。用 aslnstanceOf 方法将引用转换为子类的引用。classOf 获取对象的类名。

分辨什么情况用 aslnstanceOf,什么情况用 islnstanceOf

1) classOf[String]就如同 Java 的 String.class 。

2)obj.islnstanceOf[T]就如同 Java 的 obj instanceof

T 判断 obj 是不是 T  类型。

3)obj.aslnstanceOf[T]就如同 Java 的(T)obj 将 obj 强

转成T类型。(转换强转成需要的类型)

前面案例基础演示+文档

举例:(代码说明)

Name:TypeConvert

package com.atguigu.chaptero7.myextends

object Typeconvert {

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

// classof 的使用,可以得到类名

println(classof[string])//输出 (这里就可以直接输出类名)

val s = "king"

println(s.getclass.getName)//使用反射机制

这里也可以得到名称

//isinstanceof asinstanceof

var p1 = new Person200

var emp = new Emp200

//将子类引用给父类( 向上转型,自动)

P1=emp

(在这里将子类给父类是没有问题的,但是因为一些原因有时候需要将一些父类的引用重新转换成对应的原先的子类)

//将父类的引用重新转成子类引用(多态),即向下转型

(有的时候在多态的时候就会用到这个特点,因为在多态的时候会出现很多子类交给父类引用的情况,但是此时如果在里面判断是哪一个子类的话,此时就要用到在这个方法)

Var emp2=p1(这里现在还是父类的引用,此时在这里还是子类,此时的p1是一个父类).asinstanceOf[Emp200](此时转型成功就可以调子类的方法,如果这一步没有转成功是没有办法转到子类的say hello)

emp2.sayHello()

//获取对象类型

println(classOf[String])

val s ="zhangsan""这里写一个变量的名称。)

println(s.getclass.getName)这种是 Java 中反射方式得到类型

printn(s.islnstanceOf[string])

println(s.aslnstanceof[stringl//将 s 显示转换成 string

var p= new Person2

vale = new Emp

p=e//将子类对象赋给父类。

p.name= "xex""

printin(e.name)

p.asinstanceof[Emp].sayHi

}

}

/ / Person 类

class person200{(这里将名字改为200就不会冲突)

var name : string = "tom"

def printName() { //输出名字

println("Person printName() " + name)

}

def sayHi(): unit = {

println( "sayHi. . .")

}

}

//这里我们继承 Person

class Empe extends Person200 {

//这里需要显式的使用 override

override def printName(){

println( "Emp printName() " +name)

//在子类中需要去调用父类的方法,使用 super

super. printName()

sayHi()

}

def sayhello()

}

 

二、最佳实践

类型检查和转换的最大价值在于:可以判断传入对象的类型,然后转成对应的子类对象,进行相关操作,这里也体现出多态的特点。【案例演示】

image.png

这里假如有一个 person 并拥有两个子类,分别是 emp 与 student,此时如果讲她们写成代码并看一下她们的使用价值。

package com.atguigu.chaptero7.myextends

object Typeconvertcase {

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

val stu = new student400

val emp = new Emp400

test(stu) //

test(emp)

}

//写了一个参数多态代码

//因为在 oop 中一个父类的引用可以接收所有子类的引用,多态(参数多态)

def test(p: Person400) : unit = {(这样写的一个 person 就意味着她的子类对象包括她自己都可以传进来)

这里的要求是判断到底是哪一个子类之后调用相应的方法。

//使用 scale 中类型检查和转换

if (p.isinstanceof [ Emp400]) { //判断

// p.asInstanceof [Emp400],对 p 的类型没有任何变化,而是返回的是 Emp400

p.asInstanceOf [ Emp400].showInfo()

}else if (p.isInstanceof[student400]) {

p.asInstanceof [student400].cryo()

}else {

println("转换失败")

}

class Person400 {

def printName() : unit = {

println( ""Person400 printName" )

}

def sayok(): unit = {

println("Person400 sayok")

}

}

class student400 extends Person400 {

val stuid = 100

overridedefprintName(:unit={

println( "student400printName")

}

def cry(: unit .= {

println(”学生的id=” + this.stuid)

}

}

class Emp400 extends Person400 {

val empId = 800

override def printName() : unit = {

println( "Emp400 printName" )

}

def showInfo() : unit = {

println(”雇员的id=” + this.empid}

}

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