(6)scala中的隐式转换

这篇博客介绍了Scala编程语言中的隐式转换机制,包括隐式函数、隐式参数和隐式类的使用。通过示例展示了如何定义和应用这些隐式转换,以及它们在类型转换和方法调用中的作用。同时,提到了隐式查找的规则,即首先在当前作用域查找,然后在隐式参数的类型作用域内查找。
摘要由CSDN通过智能技术生成

隐式转换

scala允许开发人员自定义类型转换规则
将两个无关的类型通过编程手段让他们自动转换

隐式函数

object ScalaImplicit {
    def main(args: Array[String]): Unit = {
    //定义隐式函数 让Double 类型的变量自动转换为int类型
        implicit def transform( d : Double ): Int = {
            d.toInt
        }
        var d : Double = 2.0
        val i : Int = d
        println(i)
    }
}

隐式参数 & 隐式变量

object ImplicitConversion {
  def main(args: Array[String]): Unit = {
    //隐式值/变量
    implicit val dd : Double = 2.0

    //隐式参数
    def transform( implicit  d : Double = 3.0 ) = {
      d.toInt
    }
//值调用顺序:隐式值 -> 隐式参数默认值 -> 前两者都没有 报错
    println(transform()) //结果:3  
    //方法调用时,使用小括号会导致隐式值无法转递 所以这里调用的是隐式参数的值
    println(transform)//结果:2
    //不使用小括号可以传递隐式值
  }
}
}

隐式类

在Scala2.10后提供了隐式类,可以使用implicit声明类,隐式类的非常强大,同样可以扩展类的功能,在集合中隐式类会发挥重要的作用。
其所带的构造参数有且只能有一个
隐式类必须被定义在“类”或“伴生对象”或“包对象”里,即隐式类不能是顶级的。

object ScalaImplicit {
    def main(args: Array[String]): Unit = {
        val emp = new Emp()
        emp.insertUser()
    }
    class Emp {
    }
    //将一个类Emp 变成另外一个类 User
    implicit class User( emp : Emp) {
        def insertUser(): Unit = {
            println("insert user...")
        }
    }
}

隐式机制

首先会在当前代码作用域下查找隐式实体(隐式方法、隐式类、隐式对象)。(一般是这种情况)
如果第一条规则查找隐式实体失败,会继续在隐式参数的类型的作用域里查找。类型的作用域是指与该类型相关联的全部伴生对象以及该类型所在包的包对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值