• 快学Scala(15)--注解


    什么是注解

    注解是那些你插入到代码中以便有工具可以对它们进行处理的标签。工具可以在代码级别处理,也可以处理被编译器加入了注解信息的类文件。

    什么可以被注解

    类、方法、字段、局部变量和参数

    针对Java特性的注解

    1. Java修饰符

    @volatile  =>  volatile
    @transient  =>  transient  //瞬态,不会被序列化
    @strictfp  =>  strictfp   //使用IEEE的double值来进行浮点运算。计算结果更慢,但代码可移植性更高
    @native  =>  native      //标记那些在C或C++代码中实现的方法

    2. 标记接口

    @cloneable  =>  Cloneable
    @remote  =>  java.rmi.Remote
    

    3. 受检异常

    class Book {
      @throws(classOf[IOException]) def read(filename: String) { ... }  // void read(String filename) throws IOException
    }
    

    4. 变长参数

    @varargs def process(args: String*)
    

    5. JavaBeans

    @BeanProperty,编译器将生成JavaBeans风格的getter和setter方法。

    用于优化的注解

    1. 尾递归:@tailrec

    2. 跳转表生成与内联:@switch

    (n: @switch) match {
      case 0 => "Zero"
      case 1 => "One"
      case _ => "?"
    }

    3. 可省略方法:@elidable

    4. 基本类型的特殊化

    def allDifferent[T](x: T, y: T, z: T) = ...  //不高效,装箱拆箱
    def allDifferent(x: Int, y: Int, z: Int)  //优化,但要写七个方法
    def allDifferent[@specialized T](x: T, y: T, z: T)  //编译器自动生成七个方法
    def allDifferent[@specialized(Long, Double) T](x: T, y: T, z: T)  //特殊化限定在所有可选类型的子集

      可指定类型: Unit, Boolean, Byte, Short, Char, Int, Long, Float, Double

    用于错误和警告的注解

    @deprecated

    @deprecatedName

    @implicitNotFound 在某个隐式参数不存在的时候生成有意义的错误提示

    @unchecked 用于在匹配不完整时取消警告消息

    @uncheckedVariance取消与型变相关的错误提示

  • 相关阅读:
    List<string>里的集合和字符串互转
    黑马程序员学习9
    黑马程序员学习7
    黑马程序员学习11
    黑马程序员学习10
    黑马程序员学习8
    黑马程序员学习12
    为什么Huffman编码不会发生冲突
    mule esb 配置maven 何苦
    php实现kafka功能开发 何苦
  • 原文地址:https://www.cnblogs.com/PaulingZhou/p/6677203.html
Copyright © 2020-2023  润新知