Scala

Scala 隐式转换 implicit

2019-11-23  本文已影响0人  数星星的鱼

隐式转换:在原有对象不做任何修改的情况下,为其添加新功能

隐式转换关键字:implicit

方式一:implicit 作用于方法

    class RichMan(name:String){
        def eatMeat(): Unit ={
            println(name + " 有钱人吃山珍海味")
        }
    }

    class Man(val name:String){
        def eat(): Unit ={
            println(name + " 普通人吃五谷杂粮")
        }
    }

    // 隐式转换,让 Man 类型 拥有 RichMan 的功能
    implicit def rick(m:Man) = new RichMan(m.name)

    def main(args: Array[String]): Unit = {
        val man = new Man("tom")
        man.eat()
        man.eatMeat()   // 通过隐式转换让 man 拥有 RichMan 的功能
    }

方式二:implicit 作用于类

    // 隐式转换,让 Man 类型 拥有 RichMan 的功能
    implicit class RichMan(m:Man){
        def eatMeat(): Unit ={
            println(m.name + "有钱人吃山珍海味")
        }
    }

    class Man(val name:String){
        def eat(): Unit ={
            println(name + "普通人吃五谷杂粮")
        }
    }

    def main(args: Array[String]): Unit = {
        val man = new Man("tom")
        man.eat()
        man.eatMeat()
    }

方式二:implicit 作用于参数

    // 隐式转换,该方法需要一个 Man类型的隐式参数
    def eatMeat(implicit m:Man): Unit ={
        println(m.name + " 有钱人吃山珍海味")
    }
    
    class Man(val name:String){
        def eat(): Unit ={
            println(name+" 普通人吃五谷杂粮")
        }
    }

    def main(args: Array[String]): Unit = {
        // 声明变量 man 为隐式参数,可传递给其他需要隐式参数的地方使用
        implicit val man = new Man("tom")
        man.eat()
        eatMeat
    }
上一篇下一篇

猜你喜欢

热点阅读