我正在尝试向现有类型添加新功能(因此我可以让IDE自动为我无法控制的类型建议相关功能,例如Future[Option[A]]).我已经探索了隐式类和隐式转换来实现这一点,它们似乎都提供了相同的行为.
使用隐式类之间是否有任何有效的区别:
case class Foo(a: Int)
implicit class EnrichedFoo(foo: Foo) {
def beep = "boop"
}
Foo(1).beep // "boop"
Run Code Online (Sandbox Code Playgroud)
并使用隐式转换:
case class Foo(a: Int)
trait Enriched {
def beep: String
}
implicit def fooToEnriched(foo: Foo) = new Enriched {
def beep = "boop"
}
Foo(1).beep // "boop"
Run Code Online (Sandbox Code Playgroud)
我想这里的一个区别可能是第一个例子创建了一个一个类而不是一个特征,但是我可以很容易地调整隐式类来扩展一个抽象特征,例如:
case class Foo(a: Int)
trait Enriched {
def beep: String
}
implicit class EnrichedFoo(foo: Foo) extends Enriched {
def beep = "boop"
}
Foo(1).beep // "boop"
Run Code Online (Sandbox Code Playgroud)