美文网首页
AbstractProcessor 注解处理器相关

AbstractProcessor 注解处理器相关

作者: 蒸汽飞船 | 来源:发表于2018-04-19 21:35 被阅读70次

    1. google提供了一个注册处理器的库:用于生产meta-inf信息

    compile 'com.google.auto.service:auto-service:1.0-rc2'
    

    一个注解搞定:

    AutoService(Processor.class)
    public class MyProcessor extends AbstractProcessor {
          ...
    }
    

    2. 项目结构:

    ----bindview-annotation(Java Library)
    ----bindview-api(Android Library)
    ----bindview-compiler(Java Library)
    ----app(Android App)
    
    bindview-annotation 注解声明
    bindview-api 调用Android SDK API
    bindview-compiler 注解处理器相关
    app 测试App
    

    3. Element概念

    package com.example;        // 包PackageElement
    
    public class MyClass {      // 类TypeElement
    
        private int a;          // 变量VariableElement
    
        private Foo other;      // 变量VariableElement
    
        public Foo () {}        // 方法ExecuteableElement
    
        public void setA (      // ExecuteableElement
                    int newA    // TypeElement
                    ) {
    
        }
    }
    

    4.getname方法的区别:

    总结:getName()和getCanonicalName()只有数组和内部类的表现不一样。

    详细参考
    以下顺序为:
    getName()
    getCanonicalName()
    getSimpleName()

    ******************************** 普通类 ****************************************
    com.ershuai.stu.other.TestClass
    com.ershuai.stu.other.TestClass
    TestClass
    
    ******************************** 普通类  List ****************************************
    java.util.ArrayList
    java.util.ArrayList
    ArrayList
    
    ******************************* Integer.class  *****************************************
    java.lang.Integer
    java.lang.Integer
    Integer
    
    ********************************  int .class  ****************************************
    int
    int
    int
    
    ******************************** 普通类  array - 有区别 ****************************************
    [Lcom.ershuai.stu.other.TestClass;
    com.ershuai.stu.other.TestClass[]
    TestClass[]
    
    ******************************** 内部类 - 有区别  ****************************************
    com.ershuai.stu.other.Test0$NTestClass
    com.ershuai.stu.other.Test0.NTestClass
    NTestClass
    
    

    Javapoet生成代码

    占位符的使用

    $L 啥也能占
    $S for Strings
    $T for Types
    $N for Names(我们自己生成的方法名或者变量名等等)
    这里的$T,在生成的源代码里面,也会自动导入你的类。

    静态倒入

    Javapoet参考

    JavaFile.builder("com.example.helloworld", hello)
        .addStaticImport(hoverboard, "createNimbus")
        .addStaticImport(namedBoards, "*")
        .addStaticImport(Collections.class, "*")
        .build();
    

    那么我们生成的类就会出现这些代码:

    import static com.mattel.Hoverboard.Boards.*;
    import static com.mattel.Hoverboard.createNimbus;
    import static java.util.Collections.*;
    

    相关文章

      网友评论

          本文标题:AbstractProcessor 注解处理器相关

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