美文网首页重走安卓进阶路
重走安卓进阶路——注解&lambda

重走安卓进阶路——注解&lambda

作者: 小呀么小黄鸡 | 来源:发表于2020-03-12 17:23 被阅读0次

    lambda表达式(>Java7)

    意义

    把一块代码赋值给变量,就像js中将函数赋值给一个变量。此处的代码块即为闭包,也是一个匿名内部类,可以用Runnable来实现

    表现

    引入了一个新的语法元素和操作符,“->”,用它连接参数与方法体。

    优势

    1. 代码简洁
    2. 无需考虑匿名内部类声明中的变量、方法名,会自动匹配
    3. 结合使用“::”(method reference,即方法引用)、Stream API、Optional <T>可以发挥更大作用

    语法格式

    1. 无参数,无返回值
      ()->println("");
    2. 有一个参数,且无返回值
      (param)->println("");
    3. 只有一个参数,小括号可省略
      param->println(param);
    4. 有两个以上参数,有返回值,且lambda方法体中有多条语句
      (x, y)->{ println(""); return x+y; }
    5. lambda方法体中只有一条语句,return和大括号都可以省略
      (x, y) -> println(x+""+y);
    6. lambda表达式的参数列表的数据类型可以省略不写,因为JVM编译器会根据上下文推断出相应的数据类型,即“类型推断”

    注解

    定义

    为Java代码提供元数据。作为元数据,注解不直接影响其中的代码执行,但也有一些类型的注解晒机上可以用于这一目的。从Java5开会加入。
    注解即标签,注解给代码块贴上标签以备后续处理

    自定义注解

    通过@Interface关键字定义,如:public @Interface Test{},它的形式与接口很类似,只多了一个@符号,就创建了一个名为Test的注解。
    使用即是在代码块上方加上“@Test”,就应用了该注解

    @Test
    public class TestAnnotation{}
    

    元注解

    可以理解为注解的注解,作为基本注解能应用到其他注解上,作用是作为其他注解的解释或者区别属性。
    共五种,@Rentation、@Documented、@Target、@Inherited、@Repeatable(Java8新增)

    Retation,注解存活时间,详见RetentionPolicy
    1. SOURCE,默认,源码阶段
    2. CLASS,编译进行,不会加到JVM中
    3. RUNTIME,运行时
    Target,注解的使用场景

    是在方法、类还是方法参数,详见ElementType

    Documented

    可将注解中的元素包含到JavaDoc中

    Inherited意为继承

    但不是注解本身可继承,而是若被注解的类的子类没有应用任何注解时,则子类汇集成父类已经应用的带有@Inherited注解的注解

    Repeatable可重复的

    用处

    1.提供信息给编译器:它利用注解探测错误和警告信息
    2 class编一阶段时的处理:软件工具可以用来生成代码,Html文档或做其他处理

    1. 运行时的处理:可以在程序运行时接收代码的提取,注解不是代码本身的一部分

    注解的提取

    1. 反射法
      <1>首先通过Class对象的isAnnotationPresent()方法判断是否应用了某注解
      <2>然后通过getAnnotation()方法来获取Annotation对象
      或使用getAnnotations()方法
    2. APT(Annotation Processing Tool)
      是一种处理注解的工具,它对源代码文件进行检测,找出其中的Annotation,根据注解自动生成代码。
      annotation Processor和android-apt功能一直,是替代关系。
      annotation Processor是APT的一种,在内置框架中,不需要引入。
    APT的使用
    1. 目录结构
      annotations: 注解的声明
      api:主机的方法、接口
      processors:注解扫描
    2. 自仿ButterKnife

    注解小结

    1. Annotation型定义为@Interface,所有Annotation会自动继承Java.lang.Annotation这一接口,因此不能再去继承别的类或接口
    2. 参数成员只能用public或默认(default)这两个访问权限修饰
    3. 参数成员只能用基本类型(八种)和String、Enum、Class、annotations数据类型和他们的数组
    4. 获取类方法和字段的注解信息,必须通过Java的反射技术获取Annotation对象

    相关文章

      网友评论

        本文标题:重走安卓进阶路——注解&lambda

        本文链接:https://www.haomeiwen.com/subject/twzydhtx.html