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