В Scala, как я могу определить сопутствующий объект для класса, определенного в Java?
Я хотел бы добавить неявные преобразования в классы Java, сгенерированные инструментом моделирования. Поэтому я хочу добавить их к объекту-компаньону этих классов, чтобы компилятор автоматически их нашел. Но я не могу добавить их в отдельный файл, потому что спутник должен быть определен в том же файле. Что я могу с этим поделать?
Конечно, я могу определить все мои неявные преобразования в другом объекте, а затем перенести его в область видимости, но это требует дополнительного импорта. Любое другое решение?
2 ответа
С компилятором Scala в его нынешнем виде невозможно определить сопутствующие объекты, кроме как поместить их в один и тот же файл. Лучшее, что вы можете сделать, - это объект-компаньон с тем же пакетом и именем и дополнительным импортом.
Если вы можете придумать хороший способ создать совместное общение без нарушения предположений об инкапсуляции, отправьте сообщение по http://groups.google.com/group/scala-debate поскольку это, безусловно, очень полезная функция.
Конечно, вы можете определить свой собственный объект-компаньон, что я часто делаю в своем проекте. 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
это модуль (то есть скала object
)