Scala Language
Umfang
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
}
}