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) }}
阅读全文
0 0
- Scala基本语法(三)
- Scala基本语法(一)
- Scala基本语法(二)
- Scala基本语法(四)
- Scala基础应用(1)- 基本语法
- 第一章 scala 基本语法
- scala 基本语法
- Scala基本语法初探
- scala 基本语法-ok
- scala 基本语法-cp
- scala基本语法-1
- scala 基本语法_2
- Scala基本语法
- scala基本语法学习
- Scala基本语法学习
- scala基本语法
- Scala基本语法
- scala基本语法
- POJ. 2253 Frogger (Dijkstra )
- jquery获取span标签下的第一个span子标签内容
- EL表达式与jQuery的$()
- MFC多语言开发
- 微信小程序 rich-text
- Scala基本语法(三)
- json对象和json字符串
- 在eclipse中使用自己下载的maven安装步骤
- QT-各版本的下载链接
- 基于application的程序,要求能够从文本文件(text.txt)中统计出英文字母的个数和大写字母的个数,并输出。
- Genymotion模拟器
- PLSQL Developer怎样设置为中文
- 梯度下降法的三种形式BGD、SGD以及MBGD
- c与c++的区别