Ce n'est pas supposé fonctionner de cette façon - l'utilisation de import Inner._
est un comportement cohérent. Généralement, l'objet compagnon est nécessaire, si vous souhaitez obtenir un comportement similaire à celui des membres statiques de Java. En général, l'objet compagnon est nécessaire. Scala façon est de déplacer tous les membres statiques loin à un objet singleton, avec l'avantage que memebers privé/protégé d'une classe d'accompagnement sont accessibles depuis le:
object Outer {
object Inner {
def print(inner: Inner) = inner.B // compiles!
}
class Inner {
private val B = "B"
}
}
Vous pouvez utiliser l'objet compagnon comme une usine pour la classe avec un constructeur privé:
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 = [email protected]
scala> new Outer.Inner
<console>:7: error: constructor Inner cannot be accessed in object $iw
new Outer.Inner
^
Je suis venu ici * encore * (après avoir oublié la chose), montrant à quel point ce problème peut être important pour les nouveaux arrivants. Je pense que le 'Outer' ne joue aucun rôle dans la question; c'est tout à fait pareil même sans. Merci d'avoir demandé ça! – akauppi