scala【隐式参数、隐式函数、隐式类】

一、隐式参数

隐式参数是级别在中间的一种参数形式。在调用是可以写也可以不写。在有隐式参数的方法中,调用此方法,那么JVM虚拟机首先寻找的是传参,再传参没有找到的情况下,才会去寻找隐式参数,如果不巧的是隐式参数也没有,这是JVM还会去寻找参数默认值,如果都没有,则调用时会报错,提示需要传参,要么就去写隐式参数。
案例演示:

implicit val num:Int=10
def sum2(a:Int)(implicit b:Int):Int={
    a+b
  }
def main(args: Array[String]): Unit = {
var result=sum2(3)
    println(result)
    }
注:如果写了隐式参数,那么就可以不用写传参值。

二、隐式函数

和隐式参数差不多,只不多这里将隐式参数换成了隐式函数。隐式函数可以在自己创建了莫各类对象就拥有相应的方法。隐式参数就是不需要new相应的类的对象,就可以拥有它的方法。
案例演示1:

//定义隐式函数
implicit def doubleToInt(obj:Double):Int=obj.toInt

def main(args: Array[String]): Unit = {
//隐式函数自动转化
var a:Int=3.5
}

案例演示2:
创建计算机类

class Computer {
  def funJia(a:Int,b:Int)={
    println(a+b)
  }
  def funJian(a:Int,b:Int)={
    println(a-b)
  }
  def funChen(a:Int,b:Int)={
    println(a*b)
  }
  def funChu(a:Int,b:Int)={
    println(a/b)
  }
}

object Computer{

}

创建隐式函数并且实现方法调用

//创建隐式函数
implicit def demo2ToInt(obj:ImplicitDemo2):Computer=new Computer

//实用类创建之后就能嗲用计算机类里面的方法,免去了再去创建计算机对象的过程
def main(args: Array[String]): Unit = {
var implicitDemo2 = new ImplicitDemo2
implicitDemo2.funJia(1,2)
    implicitDemo2.funJian(2,1)
    implicitDemo2.funChen(2,3)
    implicitDemo2.funChu(6,3)
}

三、隐式类

隐式类一般为实体类服务,可以隐式的为实体类增加方法。在实体类创建对象后自动获得此方法。相当于隐式类为目标类放开了权限,只要目标类创建了对象,该对象就可以调用隐式类中的方法。隐式类必须写在object类中,因为object类相当于java中的静态类,在代码执行前编译,这样才能被找到。一般来说隐式类写在一个包中最好,方便查找,包括隐式函数和隐式参数。
案例演示:
创建隐式类:

implicit class Student(obj:ImplicitDemo2){
    def showStuMsg()={
      println("我是一名小学生")
    }
  }

在ImplicitDemo2类中应用

def main(args: Array[String]): Unit = {
var implicitDemo2 = new ImplicitDemo2
implicitDemo2.showStuMsg()
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值