Scala Language
Anmerkungen
Suche…
Syntax
- @AnAnnotation def someMethod = {...}
- @AnAnnotation-Klasse someClass {...}
- @AnnotatioWithArgs (annotation_args) def someMethod = {...}
Parameter
Parameter | Einzelheiten |
---|---|
@ | Gibt an, dass das folgende Token eine Anmerkung ist. |
SomeAnnotation | Der Name der Anmerkung |
constructor_args | (optional) Die an die Annotation übergebenen Argumente. Wenn keine, werden die Klammern nicht benötigt. |
Bemerkungen
Scala-lang bietet eine Liste der Standardanmerkungen und ihrer Java-Entsprechungen .
Verwenden einer Anmerkung
Diese Beispielanmerkung weist darauf hin, dass die folgende Methode nicht mehr deprecated
.
@deprecated
def anUnusedLegacyMethod(someArg: Any) = {
...
}
Dies kann auch äquivalent geschrieben werden als:
@deprecated def anUnusedLegacyMethod(someArg: Any) = {
...
}
Anmerkungen zum Hauptkonstruktor
/**
* @param num Numerator
* @param denom Denominator
* @throws ArithmeticException in case `denom` is `0`
*/
class Division @throws[ArithmeticException](/*no annotation parameters*/) protected (num: Int, denom: Int) {
private[this] val wrongValue = num / denom
/** Integer number
* @param num Value */
protected[Division] def this(num: Int) {
this(num, 1)
}
}
object Division {
def apply(num: Int) = new Division(num)
def apply(num: Int, denom: Int) = new Division(num, denom)
}
Der Sichtbarkeitsmodifizierer (in diesem Fall protected
) sollte nach den Anmerkungen in derselben Zeile stehen. @throws
die Annotation optionale Parameter akzeptiert (da in diesem Fall @throws
eine optionale Ursache akzeptiert), müssen Sie vor den Konstruktorparametern eine leere Parameterliste für Annotation: ()
angeben.
Hinweis: Es können mehrere Anmerkungen angegeben werden, auch vom selben Typ ( wiederholte Anmerkungen ).
Ähnlich bei einer Fallklasse ohne zusätzliche Factory-Methode (und der für die Annotation angegebenen Ursache):
case class Division @throws[ArithmeticException]("denom is 0") (num: Int, denom: Int) {
private[this] val wrongValue = num / denom
}
Eigene Anmerkungen erstellen
Sie können Ihre eigenen Scala-Anmerkungen erstellen, indem Sie Klassen erstellen, die von scala.annotation.StaticAnnotation oder scala.annotation.ClassfileAnnotation abgeleitet sind
package animals
// Create Annotation `Mammal`
class Mammal(indigenous:String) extends scala.annotation.StaticAnnotation
// Annotate class Platypus as a `Mammal`
@Mammal(indigenous = "North America")
class Platypus{}
Anmerkungen können dann mit der Reflection-API abgefragt werden.
scala>import scala.reflect.runtime.{universe ⇒ u}
scala>val platypusType = u.typeOf[Platypus]
platypusType: reflect.runtime.universe.Type = animals.reflection.Platypus
scala>val platypusSymbol = platypusType.typeSymbol.asClass
platypusSymbol: reflect.runtime.universe.ClassSymbol = class Platypus
scala>platypusSymbol.annotations
List[reflect.runtime.universe.Annotation] = List(animals.reflection.Mammal("North America"))