Scala 泛型介绍和应用实例1 | 学习笔记

简介: 快速学习 Scala 泛型介绍和应用实例1

开发者学堂课程【Scala 核心编程 - 进阶Scala 泛型介绍和应用实例1学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/610/detail/9150


Scala 泛型介绍和应用实例1


内容介绍

一、泛型基本介绍

二、Scala 泛型应用案例1

三、Scala 泛型应用案例2


一、泛型基本介绍

1)如果我们要求函数的参数可以接受任意类型。可以使用泛型,这个类型可以代表任意的数据类型。

2)例如 List,在创建 List 时,可以传入整形、字符串、浮点数等等任意类型

那是因为 List 在类定义时引用了泛型。比如在 Java中:public interface List<E> extends Collection<E>


二、Scala 泛型应用案例1

要求:

1)编写一个 Message 类

2)可以构建 Int 类型的 MessageString 类型的 Message.

3)要求使用泛型来完成设计(说:不能使用 Any)

object GenericUse

def main(args:ArrayString):Unit=

val mes1=new StrMessage[String]("10") printin(mes1.get)

val mes2=newIntMessageInt(20) println(mes2.get)

}}

//在Scala定义泛型用T,s为泛型的引用

abstract class Message[T](s: T) {

def get:T=s

}

//子类扩展的时候,约定了具体的类型class StrMessage[Stringl(msg:String)extends Message(ms class IntMessage[Int](msgInt)extendsMessage(msg)

下面执行一下,建一个章节:

image.png

写一个测试文件,开始往里面打包: 

image.png

现在讲的语法是generic,泛型:

image.png

先写第一个案例:

image.png

package com.atguigu.chapter18.generic

object GenericDemo01 {

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

val intMessage = new IntMessage[Int](10) println(intMessage)

}

}

/*

编写一个 Message 类

可以构建Int类型的Message,

String类型的Message.

要求使用泛型来完成设计,(说明:不能使用Any)

*/

abstract class Message[T](s:T) {

def get = s

}

class IntMessage[Int](v:Int) extends Message(v)

执行:

image.png

这就是int类型。

如果要构建一个string类型:

package com.atguigu.chapter18.generic

object GenericDemo01 {

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

val intMessage = new IntMessage[Int](10) println(intMessage)

val strMessage=new StringMessage[String](“hello”)

println(strMessage)

}

}

/*

编写一个 Message 类

可以构建Int类型的Message,

String类型的Message.

要求使用泛型来完成设计,(说明:不能使用Any)

*/

abstract class Message[T](s:T) {

def get = s

}

class StringMessage[String](v:String) extends Message(v)

点击执行:

image.png

这就是string类型。以上是第一个应用案例。


三、Scala 泛型应用案例2

要求

1)请设计一个EnglishClass(英语班级类),在创建EnglishClass的一个实例时,需要指定[班级开班季节(spring,autumnsummerwinter)、班级名称、班级类型]  

2)开班季节只能是指定的,班级名称为string,班级类型是(字符串类型"高级","初级班"..)或者是 Int类型(12,3等)

3)请使用泛型来完成本案例.

下面写第二个案例:

image.png

package com.atguigu.chapter18.generic

object GenericDemo02 {

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

//使用

val class01=new EnglishClass[SeasonEnum. SeasonEnum,String,String]SeasonEnum.Spring,”0705,“高级班”)println("class01 " + class01.classSesaon + " " class01.className + class01.classType) }

}

/* 

Scala泛型应用案例2

要求

请设计一个EnglishClass(英语班级类),在创建EnglishClass的一个实例时,需要指定[班级开班季节(spring,autumnsummerwinter)、班级名称、班级类型]  

开班季节只能是指定的,班级名称为string,班级类型是(字符串类型"高级","初级班"..)或者是 Int类型(12,3等)

请使用泛型来完成本案例.

*/

class Englishclass[A,B,c](val classsesaon: A, val className:B,val classtype:

//季节是枚举类型

coass SeasonEnum extends Enumeration {

type SeasonEnum = Value

val spring,autumn,summer,winter = value

}

点击运行:

image.png

我们也可以创建第二种类型,所有都不变,val class02 = new Englishclass[SeasonEnum.SeasonEnum,string,I nt](SeasonEnum.spring,"@707班",1)println("class02 " + class02.classSesaon +"" + class02.clas sName + class02.classType)

点击运行:

image.png

以上就是第二个案例的讲解。

相关文章
|
JavaScript 中间件 网络架构
【vue入门手册】十一、动态路由 && 登录注册
【vue入门手册】十一、动态路由 && 登录注册
248 0
|
12月前
|
机器学习/深度学习 数据可视化 自动驾驶
YOLO11-seg分割:具有切片操作的SimAM注意力,魔改SimAM助力分割
本文创新地对SimAM注意力机制进行魔改,引入切片操作,显著提升了小目标特征提取能力。针对SimAM在计算整张特征图的像素差平均值时可能忽略小目标重要性的问题,通过切片操作增强了小目标的加权效果。实验结果显示,魔改后的SimAM在YOLO11-seg上的Mask mAP50从0.673提升至0.681,有效改善了小目标检测性能。
1033 2
|
关系型数据库 MySQL 数据安全/隐私保护
使用Docker构建本地Mysql容器及配置
使用Docker构建本地Mysql容器及配置
364 1
|
缓存 运维 负载均衡
详解 CDN 加速
详解 CDN 加速
603 0
详解 CDN 加速
|
前端开发 JavaScript Java
2020新整理的Java面试题
2020新整理的Java面试题
120 0
|
5天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾