Класс Companion требует импорта методов объекта Companion и вложенных объектов?
Я смотрю на код активатора типов безопасности Akka, и меня заинтриговала следующая конструкция:
Сопутствующий объект:
object MarkerActor {
sealed trait MarkerMessage
case object Stop extends MarkerMessage
..
def objectMethod = print("hi from companion object")
}
Сопутствующий класс: он импортирует методы сопутствующего объекта:
class MarkerActor extends Actor with ActorLogging {
import MarkerActor._ // Comment this line to compare w or w/o import available
objectMethod // just to see if 'visible' within companion class
override def receive = {
case Stop => {
Так что... это немного удивительно. Почему между классом / объектом-компаньоном нет "особых отношений", позволяющих классу автоматически "видеть" методы объекта?
Обновление Я немного скептически отнесся к этому, и поэтому продолжил и прокомментировал "import MarkerActor._". Это привело к ошибкам "Symbol not found: Stop" в классе Companion. Итак.. импорт действительно требуется.
1 ответ
Несколько лет назад обсуждался вопрос о том, следует ли неявно импортировать все элементы объекта-компаньона в их родительские классы. Принятое в то время решение, которое все еще имеет смысл сегодня, заключалось в том, чтобы потребовать явного импорта, поскольку добавить дополнительный импорт проще, чем удалить нежелательный. Вот полная дискуссия.