scala-44:Scala中View Bounds代码实战及其在Spark中的应

来源:互联网 发布:公司网络监控 编辑:程序博客网 时间:2024/05/16 12:45

内容:

1、View Bounds的代码实战

2、View boundsSpark中的广泛使用

class Pair_NotPerfect[T <% Comparable[T]](val first : T,val second : T){def bigger = if(first.compareTo(second) > 0)first else second  }class Pair_Better[T <% Ordered[T]](val first : T,val second : T){def bigger = if(first > second)first else second  }

视图界定:<%

   试图界定:是指我们可以把具体的传入的T类型的实例转换成Comparable[T]类型,如果comparable[T]类型不是T类型的父类,使用<%的方式可以进行隐式转换。

    val pair = new Pair_NotPerfect("Spark", "Hadoop")    println(pair.bigger)        val pairInt = new Pair_NotPerfect(3, 5) //Int -> RichInt    println(pairInt.bigger)

   例如:上述代码中的Pair传进了参数3,5使用Pair_NotPerfect[T<:Comparable[T]]就会报错,因为参数35不是Comparable[T]的子类型,这样就可以使用<%(视图界定)对其进行隐式转换(Int-> RichInt)。

Pair_NotPerfect[T<:Ordered[T]],Ordered是在Comparable方法的基础上提供了一定的关系操作符(Ordered也是trait泛型),所以可以在比较两个对象的大小的时候配合<%直接比对大小。

   视图界定与隐式转换的过程:在应用类型T无法满足上界Comparable[T]的时候,使用<%做视图界定,将类型T隐式转换成Comparable[T]的子类型,例如整数类型Int会先变成RichInt类型,RichInt是以Comparable为类型上界的,所以用ComparaTo方法,即RichInt中有ComparaTo方法。



0 0
原创粉丝点击