本文主要是介绍Scala学习笔记--视图界定,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1> 泛型类
1. 定义形式
class Pair[T,S](val first : T, val second : S)
T,S是类型的参数
2. Scala会从构造参数推断出实际类型
Val p = new Pair(42,”String”) //Pair[Int,String]
你也可以自己指定类型
Val p2 = new PairAny,Any
2> 泛型函数
1. 在函数名的后面需要把类型的参数加上
def getMiddle[T](a : Array[T]) = a(a.length / 2)
例如:
getMiddle(Array(“Mary”,”had”,”a”,”little”,”lamb”)) //将会调用getMiddle[String]
3>类型变量界定
1.如下代码就可以将声明两个组件类型相同
Class Pair[T](val first : T, val second : T)
2. 这是一个比较大小的代码
<: 设置了上界的类型,表面T必然是Comparable的子类,而要比较不同T类型的值的大小,就需要调用Comparable下面的 compareTo()方法,最后打印的结果是:Spark,因为是根据字典的排序顺序的。
- 如果我们想比较数字的话,就不可以用上面的方法了,因为类型不匹 配。
<% 可以将T 隐身转换车成Comparable[T]
<% 叫 视图界定 把T类型的实例转换成Comparable[T]类型,如果T类型的实例不是Comparable[T]的子类,利用视图界定的形式就可以把T类型,隐式转换
例如: 视图界定 把 Int 转换成 RichInt 而RichInt 是Comparatable[T]的子类,
所以就可以调用compareTo()
4.Ordered
如果想用 > ,<, == 来比较大小的话,可以用如下代码
但是对于String类型来说,需要通过视图界定把String类型,转换成RichString,而RichString是Ordered[String],>,<,==这些操作就可以通过Ordered[String]实现。
问题:为啥不可以Int不可以直接用comparable[T]类型,因为,Int 不是comparable[Int]的子类,可以通过视图界定,将Int隐式转换成RichInt,而RichInt实现了Comparable[Int]。
这篇关于Scala学习笔记--视图界定的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!