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取消与型变相关的错误提示

  • 相关阅读:
    异步解决方案----Promise与Await
    多页应用 Webpack4 配置优化与踩坑记录
    左侧固定,右侧自适应的布局方式(新增评论区大佬教的方法)
    精读《Epitath 源码
    如何编写 Typescript 声明文件
    状态码具体解释
    LINQ体验(2)——C# 3.0新语言特性和改进(上篇)
    kafka教程
    double x = 10 ,y = 0;y = x % 2; 这个表达式正确吗?
    mongodb mapreduce使用总结
  • 原文地址:https://www.cnblogs.com/PaulingZhou/p/6677203.html
Copyright © 2011-2022 走看看