Scala基本语法(三)

来源:互联网 发布:程序员竖屏显示器推荐 编辑:程序博客网 时间:2024/05/29 14:27

Point 1:Implicit

package com.scala.learn/*隐式转换特殊售票窗口(只接受特殊人群,比如学生、老人)类型不对会尝试进行隐式转换 */class SpecialPerson(val name:String)class Student(val name:String)class Older(val name:String)class Teacher(val name:String)object Implicit01 {  implicit def object2SpecialPerson(obj:Object): SpecialPerson = {    if(obj.getClass == classOf[Student]){      val stu = obj.asInstanceOf[Student]      new SpecialPerson(stu.name)    }else if (obj.getClass == classOf[Older]){      val older = obj.asInstanceOf[Older]      new SpecialPerson(older.name)    }else{      Nil    }  }  var ticketNumber = 0  def buySpecialTicket(p:SpecialPerson)={    ticketNumber += 1    "T-" + ticketNumber  }  def main(args: Array[String]) {    val zhangyuanyuan = new Student("zhangyuanyuan")    println(buySpecialTicket(zhangyuanyuan))    val gaga = new Older("gaga")    println(buySpecialTicket(gaga))    val Aaron = new Teacher("Aaron")    println(buySpecialTicket(Aaron))  }}

这里写图片描述

Point 2:

package com.scala.learn/**使用隐式转换加强现有类型  超人变身(装饰类型)  类型没有方法的时候会尝试隐式转换 */class Man(val name:String)class Superman(val name:String){  def emitLaser = println("emit a pingpang ball!")}object Implicit02 {  implicit def man2superman(man:Man):Superman = new Superman(man.name)  def main(args: Array[String]) {    val Aaron = new Man("Aaron")    Aaron.emitLaser  }}

这里写图片描述

Point 3:

package com.scala.learn/**类型方法有但是参数不一致会尝试调用隐式转换 */class TicketHouse{  var ticketNumber = 0  def buySpecialTicket(p:SpecialPerson) = {    ticketNumber += 1    "T-" + ticketNumber  }}object Implicit03 {  implicit def object2SpecialPerson(obj:Object): SpecialPerson ={    if(obj.getClass == classOf[Student]){      val stu = obj.asInstanceOf[Student]      new SpecialPerson(stu.name)    }else if (obj.getClass == classOf[Older]){      val older = obj.asInstanceOf[Older]      new SpecialPerson(older.name)    }else{      Nil    }  }  def main(args: Array[String]) {    val ticketHouse = new TicketHouse    val Aaron = new Student("Aaron")    println(ticketHouse.buySpecialTicket(Aaron))  }}

这里写图片描述

Point 4:

package com.scala.learn/* * 隐式参数 */class SignPen{  def write(content: String) = println(content)}object ImplicitContext{   implicit val signPen = new SignPen}object Implicit04 {  def signForExam(name:String)(implicit signPen : SignPen): Unit ={    signPen.write(name + " arrive in time.")  }  def main(args: Array[String]) {    import ImplicitContext._    signForExam("Aaron")    signForExam("John")  }}

这里写图片描述

Point 5:Point

package com.scala.learnclass Point(val x: Int, val y: Int) {    var t = x;    var t1 = y;    val isOriginal: Boolean = {            x == 0 && y == 0    }    def this(xArg: Int) {        this(xArg, 12344)        println("hello, I'm this constructor")    }}object Point {  def main(args: Array[String]) {    val p1 = new Point(1231)    println(p1.x)    val p2 = new Point(555, 777)    println(p2.x)    p2.t = 3    println(p2.t)  }}

这里写图片描述

原创粉丝点击