热门IT资讯网

6、Scala隐式转换

发表于:2024-11-24 作者:热门IT资讯网编辑
编辑最后更新 2024年11月24日,一、Scala隐式转换使用场景1、用于从一种类型到另一种类型的转换。2、用于缺少参数方法的调用二、Scala隐式转换分类1、隐式方法implicit def intToString(x: Int) =

一、Scala隐式转换使用场景

1、用于从一种类型到另一种类型的转换

2、用于缺少参数方法的调用

二、Scala隐式转换分类

1、隐式方法

implicit def intToString(x: Int) = x.toString

2、隐式类

implicit class RichFile(file: File) {

def read = Source.fromFile(file).mkString

}

new java.io.File(".").read

3、隐式对象

implicit object StringOrdering extends Ordering[String] {

override def compare(x: String, y: String): Int = x.length - y.length

}

4、隐式变量

implicit val test = 5

5、隐式参数

implicit val test = 5

findAnInt

def findAnInt(implicit x: Int) = x

三、隐式转换规则

1、如果表达式不符合编译器要求的类型,编译器会查找能使之符合类型要求的隐式转换

2、如果T类型中没有成员e,但是我们还是想通过T.e来访问e那么编译器会查找能应用到T类型并且返回类型包含成员e的隐式转换

四、隐式查找的规则


1、隐式实体在查找发生的地点可见(可以通过import将隐式实体绑定到当前作用域)

2、如果按照第一条规则没有找到隐式实体的话,那么会在源类型和目标的类型(T)的隐式作用域里包含的所有隐式实体中查找

2.1、类型T以及它的父类的伴生对象

2.2、参数化类型T的所有的类型参数的伴生类

2.3、类型T或者类型T的类型参数所在的对象(object)

2.4、包对象


0