1.隐式值
object ScalaDemo { implicit val str : String = "刘明" def main(args: Array[String]): Unit = { //匹配隐式值时,不加括号 show } def show(implicit name:String)={ print("name: " + name) } }
2.隐式方法
object ScalaDemo { def main(args: Array[String]): Unit = { val aa = new AA aa.methodAA() //创建了AA,经隐式方法转换,能调用BB里的方法 aa.methodBB() } implicit def AB(a:AA):BB={ new BB } } class AA { def methodAA(): Unit ={ println("methodAA...") } } class BB { def methodBB(): Unit ={ println("methodBB...") } }
3.隐式类
object ScalaDemo { def main(args: Array[String]): Unit = { val aa = new AA aa.methodAA() //创建了AA,经隐式类的主构造器转换,能调用BB里的所有方法 aa.methodBB() aa.methodBB2() } implicit class BB(aa: AA) { def methodBB(): Unit ={ println("methodBB...") } def methodBB2(): Unit ={ println("methodBB2...") } } } class AA { def methodAA(): Unit ={ println("methodAA...") } }
下面的代码标明了类的泛型为java中的Float,而在scala代码中直接写10.5f类型为scala的Float。scala与java存在大量的交互使用,通过隐式转换,省去简单又繁琐的编码。
val compare2 = new CommonCompare[java.lang.Float](10.5f, 20.5f)