Прежде всего вы, наверное, знаете, что доступ к внутренним классам осуществляется через оператор точки (.). Таким образом, доступ к классу Handler
должен быть Outer.Handler
. Когда вы находитесь в области действия this
, компилятор не может найти класс Handler
, потому что внутренний класс привязан к внешнему объекту. Здесь все объясняется гораздо лучше: http://www.scala -lang.org / node / 115 . Короче говоря, вы получаете совершенно невозможную ситуацию, потому что внутренний класс скрыт внутри внешнего класса, но фактическое создание экземпляра внешнего класса требует внутреннего класса ...
Думаю, есть много способов ее решить, я просто быстро нарисую один здесь. Поскольку вы, вероятно, хотите, чтобы класс Handler
был каким-то образом привязан к Outer
, я бы порекомендовал создать и возразить, а затем вызвать класс Outer отсюда. Таким образом, вы получите примерно такой же синтаксис, и все хранится в одном месте. Это может выглядеть примерно так:
class Outer(private val handler : Actor)
object Outer {
class Handler extends Actor { override def act { } } // The "inner" class
def apply() = new Outer(new Handler)
def apply(handler : Actor) = new Outer(handler)
}
Надеюсь, это поможет:)