第15课:scala类型参数编程实战及spark源码鉴赏
1 spark源码中的scala类型系统
2 scala类型系统编程操作实战
package com.dt.spark.scala.bascis
class Engineer
class Expert extends Engineer
class Meeting [-T]
// class Meeting [+T]
class Animal[T](val species:T){
def getAnimal(species:T) = species
}
class Maximum[T:Ordering](val x:T,val y: T){
def bigger(implicit ord:Ordering[T]) ={
if (ord.compare(x, y) >0 ) x else y
}
}
object HelloScalaTypeSystem {
def main(args: Array[String]): Unit = {
val p=new Person("scala")
val w=new Worker("java")
new Club(p,w).comunicate
val dog=new Dog("dahuang")
new Club(dog,dog).comunicate
new Club[Person](p,dog).comunicate
/////////////////
println("===============")
val e= new Meeting[Engineer]
participateMeeting(e)
val expert =new Meeting[Expert]
participateMeeting(expert)
println(new Maximum("scala","java").bigger)
println(new Maximum("50","70").bigger)
}
//def participateMeeting(meeting:Meeting[Engineer]){
def participateMeeting(meeting:Meeting[Expert]){
println("welcome: " + meeting.toString())
}
class Person(val name:String){
def talk(person:Person){
println(this.name + " talk to : " + person.name)
}
}
class Worker(name:String) extends Person(name)
class Dog( val name:String)
implicit def dog2Person(dog:Dog) = new Person(dog.name)
class Club[T <% Person](p1:T , p2:T){
def comunicate = p1.talk(p2)
}
/*class Club[T <: Person](p1:T , p2:T){
def comunicate = p1.talk(p2)
}*/
}
scala talk to : java
dahuang talk to : dahuang
scala talk to : dahuang
===============
welcome: com.dt.spark.scala.bascis.Meeting@a298b7
welcome: com.dt.spark.scala.bascis.Meeting@14991ad
scala
70