已解决
2023_Spark_实验八:Scala高级特性实验
来自网友在路上 160860提问 提问时间:2023-09-20 20:07:39阅读次数: 60
最佳答案 问答题库608位专家为你答疑解惑
1、什么是泛型类
和Java或者C++一样,类和特质可以带类型参数。在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是必须的,表示运行时的一些信息,比如类型。
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隐式参数def testParam (implicit name :String) = {println("The value is " + name)}//定义一个隐式参数implicit val name:String="这是一个隐式值"testParamdef smaller[T](a:T,b:T)(implicit order:T => Ordered[T]) =if(a<b) a else bsmaller(100,23)smaller("Hello","ABC")
5、隐式类
所谓隐式类: 就是对类增加implicit 限定的类,其作用主要是对类的功能加强!
/**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方法的类,通过查询,找到Calc2.利用应式类Calc来执行add方法*/
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"2023_Spark_实验八:Scala高级特性实验":http://eshow365.cn/6-10199-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 【jmeter】jmeter引用变量,变量值传递失败
- 下一篇: Python的电机控制模拟程序