Это просто не должно работать таким образом - использование import Inner._
является непротиворечивым поведением.
Как правило, объект-компаньон необходим, если вы хотите добиться поведения, подобного статическим членам в Java,Способ Scala состоит в том, чтобы переместить все статические элементы в одноэлементный объект с тем преимуществом, что из него можно получить доступ к закрытым / защищенным членам класса-компаньона:
object Outer {
object Inner {
def print(inner: Inner) = inner.B // compiles!
}
class Inner {
private val B = "B"
}
}
Вы можете использовать объект-компаньон в качестве фабрики длякласс с приватным конструктором:
scala> object Outer {
|
| object Inner {
| def newInstance = new Inner()
| }
| class Inner private() {
| private val B = "B"
| }
| }
defined module Outer
scala> Outer.Inner.newInstance
res1: Outer.Inner = Outer$Inner@431693
scala> new Outer.Inner
<console>:7: error: constructor Inner cannot be accessed in object $iw
new Outer.Inner
^