隐式转换

隐式转换允许编译器自动将一种类型的对象转换为另一种类型。这允许代码将对象视为另一种类型的对象。

case class Foo(i: Int)

// without the implicit
Foo(40) + 2    // compilation-error (type mismatch)

// defines how to turn a Foo into an Int
implicit def fooToInt(foo: Foo): Int = foo.i

// now the Foo is converted to Int automatically when needed
Foo(40) + 2    // 42

转换是单向的:在这种情况下,你无法将 42 转换回 Foo(42)。为此,必须定义第二个隐式转换:

implicit def intToFoo(i: Int): Foo = Foo(i)

请注意,这是一种机制,通过该机制可以将浮点值添加到整数值。

应谨慎使用隐式转换,因为它们会混淆正在发生的事情。最佳做法是通过方法调用使用显式转换,除非使用隐式转换获得有形的可读性。

隐式转换没有显着的性能影响。

Scala 会自动导入 scala.Predef的各种隐式转换,包括从 Java 到 Scala 的所有转换。默认情况下,它们包含在任何文件编译中。