别名 Scala 中的 Java 方法



给定一个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)
}
}

隐式解析检查伴随对象,而无需任何显式导入。

最新更新