Scala之视图边界

来源:互联网 发布:怎么下载淘宝号 编辑:程序博客网 时间:2024/05/29 16:39
/*视图边界    A <% B左边的类型是右边类型或者是其子类。如果不是,左边类型会隐士转换为右边的类型(前提是隐式转换的方法已经具备) */class Person(var name:String){  def sayHello = println("hello my name is "+name);  def makeFirends(p:Person): Unit ={    sayHello    p.sayHello  }}class Student(name:String) extends Person(name)class Dog(val name:String)class Party[ T <% Person](p1:Person,p2:Person){  p1.makeFirends(p2)}object  Test{  implicit def dog2Person(obj:Object):Person={    if(obj.getClass == classOf[Dog]){      val dog = obj.asInstanceOf[Dog]      new Person(dog.name)    }else{      None    }  }  def main(args: Array[String]): Unit = {    val chenxiang = new Student("chenxiang")    val xiaoyu = new Student("xiaoyu")    chenxiang.makeFirends(xiaoyu)    val erlangshen = new Student("erlangshen")    val xiaotianquan = new Dog("xiaotianquan")    val p=new Party[Person](xiaotianquan,erlangshen)  }}

原创粉丝点击