给定一个Java接口
interface Value {
Value add(Value argument);
}
(由于 Java 不支持像 + 这样的符号作为方法名称(,是否可以定义一个别名方法+
别名add
这样,当从 Scala 使用类时,可以写入
result = value1 + value2
而不是
result = value1.add(value2)
或
result = value1 add value2
别名应自动应用于实现接口的所有类。
您可以通过隐式类添加外部方法扩展
object ValueImplicits {
implicit class ValueOps(val value: Value) extends AnyVal {
def +(v: Value): Value = value.add(v)
}
}
现在它可以像这样工作
import ValueImplicits._
val v1 = new Value {}
val v2 = new Value {}
val v3 = v1 + v2
如果可以在同一包中为接口Value
创建伴随对象,则可以避免导入。
object Value {
implicit class ValueOps(val value: Value) extends AnyVal {
def +(v: Value): Value = value.add(v)
}
}
隐式解析检查伴随对象,而无需任何显式导入。