zoukankan      html  css  js  c++  java
  • 快学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取消与型变相关的错误提示

  • 相关阅读:
    c#实现windows远程桌面连接程序
    基于.NET平台常用的框架整理
    c#无限循环线程如何正确退出
    c# 内存的具体表现- 通用类型系统 深拷贝 浅拷贝 函数传参
    coco2d-x convertToWorldSpace介绍
    Effective C++条款20:宁以pass-by-reference-to-const替换pass-by-value。Test code
    函数指针与指针函数返回值的区别
    游戏开发那些事
    lua 根据指定字符拆分table字符串(转载)
    实习和学习的双重压力
  • 原文地址:https://www.cnblogs.com/PaulingZhou/p/6677203.html
Copyright © 2011-2022 走看看