Suche…


Einführung

Bereich in Scala definiert, von wo aus ein Wert ( def , val , var oder class ) aufgerufen werden kann.

Syntax

  • Erklärung
  • private erklärung
  • private [diese] Deklaration
  • private [fromWhere] Deklaration
  • geschützte Erklärung
  • geschützte [fromWhere] Deklaration

Öffentlicher (Standard) Bereich

Der Bereich ist standardmäßig public , auf den Wert kann von überall zugegriffen werden.

package com.example {
  class FooClass {
    val x = "foo"
  }
}

package an.other.package {
  class BarClass {
    val foo = new com.example.FooClass
    foo.x // <- Accessing a public value from another package
  }
}

Ein privater Umfang

Wenn der Bereich privat ist, kann nur von der aktuellen Klasse oder von anderen Instanzen der aktuellen Klasse auf ihn zugegriffen werden.

package com.example {
  class FooClass {
    private val x = "foo"
    def aFoo(otherFoo: FooClass) {
      otherFoo.x // <- Accessing from another instance of the same class
    }
  }
  class BarClass {
    val f = new FooClass
    f.x // <- This will not compile
  }
}

Ein privater paketspezifischer Umfang

Sie können ein Paket angeben, auf das auf den privaten Wert zugegriffen werden kann.

package com.example {
  class FooClass {
    private val x = "foo"
    private[example] val y = "bar"
  }
  class BarClass {
    val f = new FooClass
    f.x // <- Will not compile
    f.y // <- Will compile
  }
}

Objekt privater Umfang

Der restriktivste Bereich ist der Bereich "Objekt-privat" , der nur den Zugriff auf diesen Wert von derselben Instanz des Objekts ermöglicht.

class FooClass {
  private[this] val x = "foo"
  def aFoo(otherFoo: FooClass) = {
    otherFoo.x // <- This will not compile, accessing x outside the object instance
  }
}

Geschützter Umfang

Der geschützte Bereich ermöglicht den Zugriff auf den Wert von allen Unterklassen der aktuellen Klasse.

class FooClass {
  protected val x = "foo"
}
class BarClass extends FooClass {
  val y = x // It is a subclass instance, will compile
}
class ClassB {
  val f = new FooClass
  f.x // <- This will not compile
}

Paket geschützter Umfang

Der durch das Paket geschützte Bereich ermöglicht den Zugriff auf den Wert nur von einer Unterklasse in einem bestimmten Paket.

package com.example {
  class FooClass {
    protected[example] val x = "foo"
  }
  class ClassB extends FooClass {
    val y = x // It's in the protected scope, will compile
  }
}
package com {
  class BarClass extends com.example.FooClass {
    val y = x // <- Outside the protected scope, will not compile
  }
}


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow