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


    1、什么是泛型类

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

    参数,如下所示:

    1. /*
    2. 这里的T就是泛类型,可以代表任意类型,_表示可以是任意类型
    3. */
    4. class GenericClass[T] {
    5. //定义一个变量
    6. private var content:T= _
    7. //定义变量的get和set方法
    8. def set(value:T)={content=value}
    9. def get():T={content}
    10. }
    11. //测试
    12. object GenericClass {
    13. def main(args: Array[String]): Unit = {
    14. //定义一个Int整数类型的泛型类对象
    15. var intGeneric = new GenericClass[Int]
    16. intGeneric.set(123)
    17. println("得到的是:"+intGeneric.get())
    18. //定义一个String类型的泛型类对象
    19. var stringGeneric = new GenericClass[String]
    20. stringGeneric.set("Hello Scala")
    21. println("得到的值是:"+ stringGeneric.get() )
    22. }
    23. }

    2、什么是泛型函数

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

    后。

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

    1. import scala.reflect.{ClassTag, classTag}
    2. //创建一个函数,可以创建一个Int类型的数值
    3. def mkIntArray(elems:Int*) = Array[Int](elems:_*)
    4. mkIntArray(1,2,3,100)
    5. //创建一个函数,可以创建一个String类型的数值
    6. def mkStringArray(elems:String*) = Array[String](elems:_*)
    7. mkStringArray("Mike","Tom","Mary")
    8. //问题:能否创建一个函数mkArray,创建Int类型的数组,也是String类型的数组?
    9. def mkArray[T:ClassTag](elems:T*) = Array[T](elems:_*)
    10. mkArray(1,2,3,5,8)
    11. mkArray("Tom","Mary")

    3、隐式转换函数

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

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

    4、隐式参数

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

    1. //Scala隐式参数
    2. def testParam (implicit name :String) = {println("The value is " + name)}
    3. //定义一个隐式参数
    4. implicit val name:String="这是一个隐式值"
    5. testParam
    6. def smaller[T](a:T,b:T)(implicit order:T => Ordered[T]) =if(aelse b
    7. smaller(100,23)
    8. smaller("Hello","ABC")

    5、隐式类

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

    1. /*
    2. *Scala 的隐式类
    3. */
    4. object ImplicitClass {
    5. //隐式类
    6. implicit class Calc(x: Int) {
    7. def add(a: Int): Int = a * x
    8. }
    9. def main(args: Array[String]): Unit = {
    10. println("两个数字的和 " + 1.add(2))
    11. }
    12. }
    13. /*
    14. 隐式类执行的过程
    15. 1.当1.add(2),scala 的编译器不会立即报错,在当前域当中查询,有没有implicit修饰的
    16. 同时可以将Int 作为参数的构造器,
    17. 并且具有add方法的类,通过查询,找到Calc
    18. 2.利用应式类Calc来执行add方法
    19. */

  • 相关阅读:
    快速排序.
    80-基于stm32单片机的图书馆噪音检测量分贝仪(源码+原理图)
    高可用Kuberbetes部署Prometheus + Grafana
    Docker 安装项目运行环境
    Day30力扣打卡
    Error: Cannot find module ‘node:util‘
    STM32智能仓储管理系统教程
    java base64加密与解密
    Nautilus Chain 与 Coin98 生态达成合作,加速 Zebec 生态亚洲战略进
    Jmeter-接口测试-GET请求
  • 原文地址:https://blog.csdn.net/pblh123/article/details/133079611