斯卡拉 |注解
Scala Annotations 是添加到程序源代码中的元数据。任何类型的定义或声明都允许注释,包括 vals、vars、类、对象、特征、defs 和类型。注释用于将元信息与定义相关联。
句法:
@annot(exp_{1}, exp_{2}, …) {val name_{1}=const_{1}, …, val name_{n}=const_{n}}
所有注释都必须包含“annot”,因为它指定了注释类。没有参数的注释使用empty()。
Scala 中的预定义注解
Scala 中的预定义注释是内置的 Scala 注释,它将元信息与定义相关联。一些预定义的 scala 注释是:
- Java平台注解:
- @transient:用于将字段标记为非持久性。
- @volatile:用于标记可以在程序控制之外更改其值的字段。
- @SerialVersionUID():它将一个序列版本标识符(一个长常量)附加到一个类。
例子:private final static SerialVersionUID = < longlit >
- Java Bean 注释:
- @scala.beans.BeanProperty:这个注解,当前缀到某个变量 X 的定义时,会导致在包含该变量的类中添加Java bean 样式中的 getter 和 setter 方法 getX、setX。使用 get 或 set 后,变量的第一个字母似乎大写。
- @scala.beans.BooleanBeanProperty:这个注解相当于scala.reflect.BeanProperty,但是生成的getter方法被命名为isX而不是getX。
- 弃用注释:
- @deprecated(message: , since: ):此注解用于将定义标记为已弃用。不推荐使用的警告在属于标记为不推荐使用的定义的代码中被抑制。
句法:@deprecated("deprecation message", "release # which deprecates method")
例子:
// Scala program of Deprecation Annotations import scala.deprecated; // Creating object object GFG { // Main method def main(args: Array[String]) { // Define Deprecation Annotations: @deprecated def printMessage() = { println("This method is deprecated") } printMessage() } }
输出:
This method is deprecated
- @deprecated(message: , since: ):此注解用于将定义标记为已弃用。不推荐使用的警告在属于标记为不推荐使用的定义的代码中被抑制。
- Scala 编译器注解:
- @uncheckedStable:当应用于值声明或定义时,此注释允许定义的值出现在路径中,即使它的类型是 volatile。
句法:@annotation.unchecked.uncheckedStable val x: A with B = null
例子:
// Scala program of uncheckedStable // Compiler Annotations import scala.deprecated; // Creating object object GFG { // Main method def main(args: Array[String]) { trait A { type T = Int } trait B { type T <: String } def f(b: B)(t: b.T) = t.length // Define Compiler Annotations @annotation.unchecked.uncheckedStable val x: A with B = null // legal because x is A val y: x.T = 0 f(x)(y) } }
输出:
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
- @tailrec:此注解确保方法是尾递归的。尾递归可以保持内存需求不变。
句法:@tailrec
例子:
// Scala program of Compiler Annotations // of tail recursion import scala.annotation.tailrec // Creating object object GFG { // Main method def main(args: Array[String]) { // Define factorial method def factorial(x: Int): Int = { // Compiler Annotations of tail recursion @tailrec def factorialHelper(x: Int, accumulator: Int): Int = { if (x == 1) accumulator else factorialHelper(x - 1, accumulator * x) } factorialHelper(x, 1) } println(factorial(5)) } }
输出:
120
- @uncheckedStable:当应用于值声明或定义时,此注释允许定义的值出现在路径中,即使它的类型是 volatile。
Scala 中的用户定义注解
用户定义的注释将元信息与定义相关联。对于一个类,类文件包含一个注释类实例,该类继承自 Scala.ClassfileAnnotation 特征。对于我们访问带注释符号的每个编译单元,实例对于 Scala 类型检查器都是可见的,并且类继承自特征 scala.StaticAnnotation。
句法:
// needed for @Documented
import java.lang.annotation.*;
@Documented
public @interface impure {}