В Scala, как я могу определить объект-компаньон для класса, определенного в Java?

Я хотел бы добавить неявные преобразования в классы Java, созданные с помощью инструмента моделирования. Поэтому я хочу добавить их к сопутствующему объекту этих классов, чтобы компилятор их автоматически нашел. Но я не могу добавить их в отдельный файл, потому что компаньон должен быть определен в том же файле. Я могу что-нибудь сделать с этим?

Конечно, я могу определить все мои неявные преобразования в другом объекте, а затем ввести его в область видимости, но для этого требуется дополнительный импорт. Любое другое решение?

Ответ 1

С помощью компилятора Scala, поскольку он стоит сейчас, нет способа определить объекты-компаньоны, кроме как помещая их в один и тот же файл. Лучшее, что вы можете сделать, это не-сопутствующий объект с тем же пакетом и именем и дополнительным импортом.

Если вы можете подумать о хорошем способе создания post-hoc-общения без нарушения предположений об инкапсуляции, пожалуйста, напишите на http://groups.google.com/group/scala-debate, потому что это несомненно, будет очень полезной функцией.

Ответ 2

Вы можете, конечно, определить свой собственный объект-компаньон, который я часто делаю в своем собственном проектном стиле Predef. Например:

object domain {

  type TimeUnit = java.util.concurrent.TimeUnit
  object TimeUnit {
    def valueOf(s : String) = java.util.concurrent.TimeUnit.valueOf(str)
    val Millis = java.util.concurrent.TimeUnit.MILLISECONDS
    //etc
  }

Тогда это можно использовать:

import my.domain._
val tu : TimeUnit = TimeUnit.valueOf("MILLISECONDS")

Но ваш domain.TimeUnit является модулем (т.е. scala object)