0


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(a<b) a else 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. */
标签: spark scala 大数据

本文转载自: https://blog.csdn.net/pblh123/article/details/133079611
版权归原作者 pblh123 所有, 如有侵权,请联系我们删除。

“2023_Spark_实验八:Scala高级特性实验”的评论:

还没有评论