📜  斯卡拉 |注解

📅  最后修改于: 2022-05-13 01:55:29.134000             🧑  作者: Mango

斯卡拉 |注解

Scala Annotations 是添加到程序源代码中的元数据。任何类型的定义或声明都允许注释,包括 vals、vars、类、对象、特征、defs 和类型。注释用于将元信息与定义相关联。
句法:

所有注释都必须包含“annot”,因为它指定了注释类。没有参数的注释使用empty()。

Scala 中的预定义注解

Scala 中的预定义注释是内置的 Scala 注释,它将元信息与定义相关联。一些预定义的 scala 注释是:

  1. Java平台注解:
    • @transient:用于将字段标记为非持久性。
    • @volatile:用于标记可以在程序控制之外更改其值的字段。
    • @SerialVersionUID():它将一个序列版本标识符(一个长常量)附加到一个类。
      例子:
      private final static SerialVersionUID = < longlit >
      
  2. Java Bean 注释:
    • @scala.beans.BeanProperty:这个注解,当前缀到某个变量 X 的定义时,会导致在包含该变量的类中添加Java bean 样式中的 getter 和 setter 方法 getX、setX。使用 get 或 set 后,变量的第一个字母似乎大写。
    • @scala.beans.BooleanBeanProperty:这个注解相当于scala.reflect.BeanProperty,但是生成的getter方法被命名为isX而不是getX。
  3. 弃用注释:
    • @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
  4. 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)
          }
      }
      

      输出:

    • @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
Scala 中的用户定义注解

用户定义的注释将元信息与定义相关联。对于一个类,类文件包含一个注释类实例,该类继承自 Scala.ClassfileAnnotation 特征。对于我们访问带注释符号的每个编译单元,实例对于 Scala 类型检查器都是可见的,并且类继承自特征 scala.StaticAnnotation。
句法:

// needed for @Documented
import java.lang.annotation.*;

@Documented
public @interface impure {}