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方法

*/
相关推荐
Hello.Reader37 分钟前
Flink 内置 Watermark 生成器单调递增与有界乱序怎么选?
大数据·flink
工作中的程序员38 分钟前
flink UTDF函数
大数据·flink
工作中的程序员44 分钟前
flink keyby使用与总结 基础片段梳理
大数据·flink
Hy行者勇哥1 小时前
数据中台的数据源与数据处理流程
大数据·前端·人工智能·学习·个人开发
00后程序员张1 小时前
RabbitMQ核心机制
java·大数据·分布式
AutoMQ2 小时前
10.17 上海 Google Meetup:从数据出发,解锁 AI 助力增长的新边界
大数据·人工智能
武子康2 小时前
大数据-119 - Flink Flink 窗口(Window)全解析:Tumbling、Sliding、Session 应用场景 使用详解 最佳实践
大数据·后端·flink
阿水实证通2 小时前
能源经济大赛选题推荐:新能源汽车试点城市政策对能源消耗的负面影响——基于技术替代效应的视角
大数据·人工智能·汽车
TomCode先生3 小时前
SaaS版MES系统PC端后台功能清单与设计说明
大数据