隐式转换

隐式转换:自动转换

scala默认情况下支持数据类型的自动转换
byte->short->int->long

scala默认情况下支持多态语法中的类型自动转换
child->parent->trait(interface)

scala也允许开发人员自定义类型转换规则
将两个无关的类型通过编程手段实现自定转化

在相同的作用域内,不能含有多个相同的转换规则
package chapter01

object test10 {

  def main(args:Array[String]):Unit={
//    隐式转换:自动转换
//
//    scala默认情况下支持数据类型的自动转换
//    byte->short->int->long
//
//    scala默认情况下支持多态语法中的类型自动转换
//    child->parent->trait(interface)
//
//    scala也允许开发人员自定义类型转换规则
//    将两个无关的类型通过编程手段实现自定转化
//
//    在相同的作用域内,不能含有多个相同的转换规则
    implicit def transform(d:Double):Int={
      d.toInt
    }

    val i:Int=5.0
    println(i)
  }


}

 

package chapter01

object test11 {

  def main(args:Array[String]):Unit={
    
    implicit def transform(mysql:Mysql):Operator={
      new Operator()
    }
    //动态增加delete功能
    var mysql=new Mysql()
    mysql.select()
    mysql.delete()
  }
}

class Operator{
  def delete():Unit={}
}

class Mysql{
  def select():Unit={}
}

 

package chapter01

object test14 {

  def main(args:Array[String]):Unit={
    var user=new User14()
    user.insert()
    user.delete()

  }

  class User14{
    def insert(){}
  }

  //放进package里
  implicit class Person14(user:User14){
    def delete(){}
  }
}

 

package chapter01

import chapter01.test14.User14

object test14 {

  def main(args:Array[String]):Unit={
    var user=new User14()
    user.insert()
    user.delete()

  }

  class User14 extends Test{
    def insert(){}
  }
}

trait Test{}
object Test{
  implicit class Person14(user:User14){
    def delete(){}
  }
}

 

 
package chapter01

object test12 {

  def main(args:Array[String]):Unit={

    def test(name:String="zhangshan"):Unit={
      println("hello "+name)
    }

    test("wangwu")//hello wangwu
    test()                //hello zhangshan
    //test  报错
    
    //隐式参数
    implicit val username:String="zhaoliu"
    implicit  val age:Int=10

    //隐式值
    def test02(implicit name:String="zhangshan"):Unit={
      println("hello "+name)
    }
    test02("wangwu")//hello wangwu
    test02()                //hello zhangshan,使用小括号,无法传递隐式值
    test02                  //hello hello zhaoliu,不使用小括号,可以传递隐式值
  }
}

 

package chapter01

object test13 {

  def main(args:Array[String]):Unit={

    //隐式参数
    implicit val username:String="zhaoliu"

    //如果隐式参数存在默认值以及对应类型的隐式值,那么优先采用隐式值
    //如果找不到隐式值,那么会使用默认值
    //如果没有默认值,那么会发生错误
    def test03(implicit name:String):Unit={
      println("hello "+name)
    }
    //test03()  报错
    test03
    
  }
}

 

posted on 2020-08-09 14:46  happygril3  阅读(173)  评论(0)    收藏  举报

导航