Scala Language
Anotaciones
Buscar..
Sintaxis
- @AnAnnotation def someMethod = {...}
- @AnAnnotation class someClass {...}
- @AnnotatioWithArgs (annotation_args) def someMethod = {...}
Parámetros
Parámetro | Detalles |
---|---|
@ | Indica que el token siguiente es una anotación. |
Alguna anotación | El nombre de la anotación. |
constructor_args | (Opcional) Los argumentos pasados a la anotación. Si no hay ninguno, los paréntesis son innecesarios. |
Observaciones
Scala-lang proporciona una lista de anotaciones estándar y sus equivalentes de Java .
Usando una anotación
Esta anotación de muestra indica que el siguiente método está en deprecated
.
@deprecated
def anUnusedLegacyMethod(someArg: Any) = {
...
}
Esto también se puede escribir de manera equivalente como:
@deprecated def anUnusedLegacyMethod(someArg: Any) = {
...
}
Anotando el constructor principal.
/**
* @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)
}
El modificador de visibilidad (en este caso protected
) debe aparecer después de las anotaciones en la misma línea. En caso de que la anotación acepte parámetros opcionales (como en este caso @throws
acepta una causa opcional), debe especificar una lista de parámetros vacía para la anotación: ()
antes de los parámetros del constructor.
Nota: Se pueden especificar múltiples anotaciones, incluso del mismo tipo ( repetición de anotaciones ).
De manera similar, con una clase de caso sin método de fábrica auxiliar (y causa especificada para la anotación):
case class Division @throws[ArithmeticException]("denom is 0") (num: Int, denom: Int) {
private[this] val wrongValue = num / denom
}
Creando tus propias anotaciones
Puede crear sus propias anotaciones de Scala creando clases derivadas de scala.annotation.StaticAnnotation o 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{}
Las anotaciones pueden ser interrogadas usando la API de reflexión.
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"))