2023_Spark_实验八:Scala高级特性实验

1、什么是泛型类

和Java或者C++一样,类和特质可以带类型参数。在Scala中,使用方括号来定义类型

参数,如下所示:

Scala 复制代码
/*

这里的T就是泛类型,可以代表任意类型,_表示可以是任意类型

*/

class GenericClass[T] {



//定义一个变量

private var content:T= _

//定义变量的get和set方法

def set(value:T)={content=value}

def get():T={content}

}

//测试

object GenericClass {

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

//定义一个Int整数类型的泛型类对象

var intGeneric = new GenericClass[Int]

intGeneric.set(123)

println("得到的是:"+intGeneric.get())

//定义一个String类型的泛型类对象

var stringGeneric = new GenericClass[String]

stringGeneric.set("Hello Scala")

println("得到的值是:"+ stringGeneric.get() )

}

}

2、什么是泛型函数

函数和方法也可以带类型参数。和泛型类一样,我们需要把类型参数放在方法名之

后。

注意:这里的ClassTag是必须的,表示运行时的一些信息,比如类型。

Scala 复制代码
import scala.reflect.{ClassTag, classTag}



//创建一个函数,可以创建一个Int类型的数值



def mkIntArray(elems:Int*) = Array[Int](elems:_*)

mkIntArray(1,2,3,100)



//创建一个函数,可以创建一个String类型的数值



def mkStringArray(elems:String*) = Array[String](elems:_*)

mkStringArray("Mike","Tom","Mary")



//问题:能否创建一个函数mkArray,创建Int类型的数组,也是String类型的数组?







def mkArray[T:ClassTag](elems:T*) = Array[T](elems:_*)

mkArray(1,2,3,5,8)

mkArray("Tom","Mary")

3、隐式转换函数

所谓隐式转换函数指的是以implicit关键字声明的带有单个参数的函数。

前面讲视图界定时候的一个例子:

4、隐式参数

使用implicit申明的函数参数叫做隐式参数。我们也可以使用隐式参数实现隐式的转

换

Scala 复制代码
//Scala隐式参数

def testParam (implicit name :String) = {println("The value is " + name)}



//定义一个隐式参数

implicit val name:String="这是一个隐式值"



testParam



def smaller[T](a:T,b:T)(implicit order:T => Ordered[T]) =if(a<b) a else b

smaller(100,23)

smaller("Hello","ABC")

5、隐式类

所谓隐式类: 就是对类增加implicit 限定的类,其作用主要是对类的功能加强!

Scala 复制代码
/*

*Scala 的隐式类

*/

object ImplicitClass {



//隐式类

implicit class Calc(x: Int) {

def add(a: Int): Int = a * x

}


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

println("两个数字的和 " + 1.add(2))

}

}



/*

隐式类执行的过程

1.当1.add(2),scala 的编译器不会立即报错,在当前域当中查询,有没有implicit修饰的

同时可以将Int 作为参数的构造器,

并且具有add方法的类,通过查询,找到Calc

2.利用应式类Calc来执行add方法

*/
相关推荐
AntsData14 小时前
用 12K+ 条亚马逊评论信号,定位机械键盘下一版该改什么
java·大数据·计算机外设
蓝鲨硬科技15 小时前
Token之后,物理AI需要什么样的度量衡?
大数据·人工智能
GlobalInfo15 小时前
管道检测机器人行业调查、市场规模、排名分析报告2026-2032
大数据·人工智能·机器人
ManageEngineITSM15 小时前
工单分类怎么设计?类别、子类别与自动分派的实用方法
大数据·服务器·数据库·人工智能·分类·数据挖掘
字节跳动数据平台16 小时前
让企业本体真正运转起来:火山引擎知识引擎VeKnow 的三层重构与业务实践
大数据
FII工业富联科技服务16 小时前
多智能体如何进入制造现场?从业务协同到数字孪生验证
大数据·人工智能·算法·机器人·制造·数字孪生
Wang's Blog16 小时前
Java 项目实战:交友项目 - FastDFS 工作原理
java·大数据·交友
合合技术团队17 小时前
企业级Agent服务平台选型指南:从需求匹配到场景落地,文档解析工具怎么选?
大数据·人工智能·agent·多模态文本智能技术·企业级agent服务平台
AllData公司负责人17 小时前
AllData 可定义数据中台完成信创适配|银河麒麟 + 海光X86 CPU / 华为鲲鹏ARM CPU+ OceanBase / 人大金仓国产化环境部署落地
大数据·arm开发·数据库·人工智能·oceanbase·kingbase
Elastic 中国社区官方博客17 小时前
AgentHack Shanghai|基于阿里云AI搜索 Elasticsearch x Qoder 构建AI Agent应用
大数据·人工智能·elasticsearch·搜索引擎·阿里云·云计算·全文检索