/** * 视图界定: T <% Person * T只能是Person的子类,或者T能隐式的转换成Person */ class Person01(var name: String) { def sayHello(): Unit = { println(s"Hello,My name is $name") } def makeFriend(p: Person01): Unit = { sayHello() p.sayHello() } } //Student01类继承了Person01类,其主构造器的参数name不需要用var或val修饰 class Student01(name: String) extends Person01(name) class Cat01(var name: String) //泛型T只能是Person01及其子类,或者 T能隐式转换成Person01的类型 class Party[T <% Person01](person1: Person01, person2: Person01) { person1.makeFriend(person2) } object ImplicitDemo5 { def main(args: Array[String]): Unit = { //此种情况是可以的 /* val per1 = new Person01("李四") val per2=new Person01("张三") val party=new Party[Person01](per1,per2)*/ //这种情况也是可以的 /* val stu1=new Student01("lisi") val stu2=new Student01("wangwu") val party=new Party[Student01](stu1,stu2)*/ //通过隐式转换,将Cat01转换成Person01的类型 implicit def cat2Person01(cat:Cat01):Person01=new Person01(cat.name) val cat1=new Cat01("bosi") val cat2=new Cat01("mimi") val party=new Party[Cat01](cat1,cat2) } }
Scala隐式转换——视图界定
最新推荐文章于 2020-08-29 21:46:30 发布