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,因为是根据字典的排序顺序的。
这里写图片描述
这里写图片描述

  1. 如果我们想比较数字的话,就不可以用上面的方法了,因为类型不匹 配。
    <% 可以将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)