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

Другие вопросы по тегам