Zoeken…


Syntaxis

  • @AnAnnotation def someMethod = {...}
  • @AnAnnotation class someClass {...}
  • @AnnotatioWithArgs (annotation_args) def someMethod = {...}

parameters

Parameter Details
@ Geeft aan dat het volgende token een annotatie is.
SomeAnnotation De naam van de annotatie
constructor_args (optioneel) De argumenten die aan de annotatie zijn doorgegeven. Indien geen, zijn de haakjes niet nodig.

Opmerkingen

Scala-lang biedt een lijst met standaardannotaties en hun Java-equivalenten .

Een annotatie gebruiken

Deze voorbeeldaantekening geeft aan dat de volgende methode is deprecated .

@deprecated
def anUnusedLegacyMethod(someArg: Any) =  {
  ...
}

Dit kan ook worden geschreven als:

@deprecated def anUnusedLegacyMethod(someArg: Any) =  {
  ...
}

Annoteren van de hoofdconstructeur

/**
 * @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)
}

De zichtbaarheidsmodificator (in dit geval protected ) moet na de annotaties op dezelfde regel komen. In het geval dat de annotatie optionele parameters accepteert (zoals in dit geval @throws een optionele oorzaak accepteert), moet u een lege parameterlijst voor de annotatie opgeven: () vóór de constructorparameters.

Opmerking: er kunnen meerdere annotaties worden opgegeven, zelfs van hetzelfde type ( herhalende annotaties ).

Op dezelfde manier met een case-klasse zonder extra fabrieksmethode (en oorzaak opgegeven voor de annotatie):

case class Division @throws[ArithmeticException]("denom is 0") (num: Int, denom: Int) {
    private[this] val wrongValue = num / denom
}

Uw eigen annotaties maken

U kunt uw eigen Scala-annotaties maken door klassen te maken die zijn afgeleid van scala.annotation.StaticAnnotation of scala.annotation.ClassfileAnnotation

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{}

Annotaties kunnen vervolgens worden ondervraagd met behulp van de reflectie-API.

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"))


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow