Псевдоним a Java метод в Scala - PullRequest
0 голосов
/ 25 мая 2020

Учитывая интерфейс Java

interface Value {

  Value add(Value argument);

}

(поскольку Java не поддерживает символы, такие как +, в качестве имен методов), возможно ли определить метод псевдонима + для псевдонима add таким образом, когда класс используется из Scala, можно написать

  result = value1 + value2

вместо

  result = value1.add(value2)

или

  result = value1 add value2

Псевдоним должен применяться автоматически всем классам, реализующим интерфейс.

1 Ответ

1 голос
/ 25 мая 2020

Вы можете добавить расширение внешнего метода через неявный класс

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)
  }

}

Неявное разрешение проверяет сопутствующие объекты без явного импорта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...