В Scala, как я могу определить сопутствующий объект для класса, определенного в Java? - PullRequest
10 голосов
/ 07 февраля 2011

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

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

Ответы [ 2 ]

9 голосов
/ 07 февраля 2011

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

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

9 голосов
/ 07 февраля 2011

Конечно, вы можете определить свой собственный объект-компаньон, что я часто делаю в моем собственном 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)

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