开发者学堂课程【Scala 核心编程 - 进阶:视图界定的介绍应用实例2】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/610/detail/9156
视图界定的介绍应用实例2
视图界定应用案例2
说明:
使用视图界定的方式,比较两个 Person 对象的年龄大小。
val p1 = new Person("tom" 10)
val p2 = new Person("jack", 20)
val compareComm2=newCompareComm2(p1p2) printin(compareComm2.getter)
class Person(val name: String,val age:Int)extends Ordered[Person]{
override def compare(that: Person): Int =this.age -that.age override def toString
:
String =this.name +"\t" + this.age}
class CompareComm2[T<% Ordered[T](obj1:Tobj2:T){
def getter = if (obj1 > obi2) obj1 else obi2
def geatter2 = if (obj1.compareTo(obj2) > 0) obi1 else obj2
}
person 继承了 ordered。ordered 里面是有一个接口的实现,有一个 compared 可以用。然后有写了一个类叫 compared to,用了视图界定,是 ordered T 的一个类型,传进去就可以用了。两个对象传进去就可以用,这是视图鉴定的一个案例。
下面来看一下:新建一个包:
package com.atguigu.chapter18.
viewbounds
object V
iew
BoundsDemo0
2
{
def main(args: Array
[
string]): Unit = {
val p1 = new Person("tom" 10)
val p2 = new Person("jack", 20)
val compareComm2=newCompareComm2(p1p2) printin(compareComm2.getter.name)//jack
}
class Person(val name: String,val age:Int)extends Ordered[Person]{
/
/
重写了ordered的方法compare
//
override def compare(that: Person): Int =this.age -that.age
override def compare(that: Person): Int =
{
this
.age
-that.age
}
//这里是重写 tostring,为了显示方便
override def toString
:
String =this.name +"\t" + this.age}
}
//比较Cat的名字的长度大小
class Cat(val name:string) extends Ordered[cat] {
override def compare(that: Cat): Int ={
this.name.length - that.name.length
}
}
//说明
//1. T<% OrderedT] 表示T是ordered子类型 java.lang.Comparable
//2. 这里调用的compareTo方法是T这个类型的方法
class CompareComm2[T<% Ordered[T](obj1:Tobj2:T){
def getter = if (obj1 > obi2) obj1 else obi2
def geatter2 = if (obj1.compareTo(obj2) > 0) obi1 else obj2
}
点击运行:
假如要比较两只猫:
val cat1 = new cat("smith")
val cat2 = new cat("tom")
println(new CompareComm2(cat1,cat2),getter.name) // smith
只要实现了 ordered 的 treat,就可以统一的经营管理。没有时间是传不进去的。这个是一个常规用法。
如果明确说是order那肯定要接受,如果没有,
假如这个地方没有继承,从这个方法就传不进去了。
这就是视图界定的第二个实例。