android JavaPoet记录

时间:2022-07-22
本文章向大家介绍android JavaPoet记录,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

官网

https://github.com/square/javapoet

使用: 本次使用的是

implementation 'com.squareup:javapoet:1.8.0'
Javapoet 主要是配合 APT 工具使用 在编译期间 生成 java 代码.
栗子

​目标代码:

package com.ben.poet;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
  }
}

poet 书写:

public class PoetTest {

   public static void main(String[] strings) throws IOException {
       testMainActivity();
  }

   private static void testMainActivity() throws IOException {
       //创建方法
       MethodSpec onCreate = MethodSpec.methodBuilder("onCreate")
               //添加Override
              .addAnnotation(Override.class)
               //修饰符
              .addModifiers(Modifier.PROTECTED)
               //方法返回值
              .returns(void.class)
               //根据字符串的类名-->对应的class type
              .addParameter(TypeVariableName.get("android.os.Bundle"), "savedInstanceState")
               //方法{}的代码
              .addStatement("super.onCreate(savedInstanceState)")
              .addStatement("setContentView(R.layout.activity_main)")
              .build();

       //TypeSpec 创建 class 或者 interface
       TypeSpec mainActivity = TypeSpec.classBuilder("MainActivity")
               //继承的父类
              .superclass(TypeVariableName.get("android.support.v7.app.AppCompatActivity"))
               //修饰符
              .addModifiers(Modifier.PUBLIC, Modifier.FINAL)
               // class 添加方法
              .addMethod(onCreate)
              .build();

       JavaFile javaFile = JavaFile.builder(" package com.ben.poet", mainActivity)
              .build();

       javaFile.writeTo(System.out);
  }
}

控制台输出代码:

package package com.ben.poet;

import java.lang.Override;

public final class MainActivity extends android.support.v7.app.AppCompatActivity {
@Override
protected void onCreate(android.os.Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
}
}

符合预期,小栗子完成.