重走安卓进阶路

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

2020-03-12  本文已影响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对象
上一篇 下一篇

猜你喜欢

热点阅读