android 可以用来写代码的代码(JavaPoet)
来源:互联网 发布:淘宝代购点什么意思 编辑:程序博客网 时间:2024/05/16 13:22
引言
JavaPoet 一个可以用来创建源代码文件的强大库。用处还是相当多的,比如可以用来根据模板快速创建源文件,减少代码的重复编写,大大节约开发时间。还可以结合注解去创建相应的功能代码,降低运行时注解效率低的弊端等等。这应该是编写第三方库和功能插件的必备神器了吧!
提前准备
新建一个java library然后再build.gradle的dependencies引入JavaPoet库compile 'com.squareup:javapoet:1.6.1'。不要在android module或主程序里引入此java library,否则会报错啊!
JavaPoet API简介
FieldSpec 创建成员变量,即声明字段。MethodSpec 创建构造函数或方法。TypeSpec 代表一个类,接口,或者枚举声明。JavaFile 根据创建好的变量方法和类信息创建Java源文件。
开始改变世界
假设我们要创建一个User类,User有两个字段,分别是name和age,并且有两个方法,分别是
printUser和getUserName。好,我们开始通过JavaPoet创建此类,代码如下所示:
public static void createFile(){ //创建属性 FieldSpec nameField = FieldSpec.builder(String.class,"name",Modifier.PRIVATE).build(); FieldSpec ageField = FieldSpec.builder(int.class,"age",Modifier.PRIVATE).build(); // 创建方法printUser和getUserName MethodSpec printUserMethod = MethodSpec.methodBuilder("printUser") //方法名 .addModifiers(Modifier.PUBLIC,Modifier.STATIC) // 设置方法为public和static .addParameter(String.class,"name") // 设置参数String name .addStatement("$T.out.println(name)",System.class) //添加代码System.out.println(name); .build(); MethodSpec getUserNameMethod = MethodSpec.methodBuilder("getUserName") .addModifiers(Modifier.PUBLIC) .returns(String.class) // 设置返回值类型为String .addStatement("return $S","tom") //添加代码return "tom"; .build(); // 创建User类 TypeSpec typeSpec = TypeSpec.classBuilder("User") .addModifiers(Modifier.FINAL,Modifier.PUBLIC) .addMethod(printUserMethod) .addMethod(getUserNameMethod) .addField(nameField) .addField(ageField) .build(); // 传入包名和TypeSpec类信息,生成代码源文件 JavaFile javaFile = JavaFile.builder("com.liwy.javapoet",typeSpec).build(); try { // java源文件的根路径(路径记得换成自己的哦!!!),会根据上面传入的包名自动创建源文件 javaFile.writeTo(new File("D:\\develop\\workspace\\testworkspace\\JavaPoet\\app\\src\\main\\java")); // javaFile.writeTo(System.out);//输出在控制板 } catch (IOException e) { e.printStackTrace(); } }
运行createFile方法
public static void main(String[] args) { createFile(); }
见证奇迹的时刻
运行此方法后你会发现User类已经出现在了com.liwy.javapoet下面!生成的User类的代码如下:
package com.liwy.javapoet;import java.lang.String;import java.lang.System;public final class User { private String name; private int age; public static void printUser(String name) { System.out.println(name); } public String getUserName() { return "tom"; }}
源码传送门
0 0
- android 可以用来写代码的代码(JavaPoet)
- javapoet——会写代码的“诗人”
- javapoet-让你不再书写无聊的代码(一)
- 可以用来查找主窗体的代码
- JavaPoet动态生成代码
- 如何写出无法维护的代码,可以用来加密哦~
- 一个可以用来做人脸检测的视频帧间差分代码
- 一段获得网卡地址的代码,可以用来做软件许可证用.
- 一段获得网卡地址的代码,可以用来做软件许可证用
- 一段获得网卡地址的代码,可以用来做软件许可证用.
- 一段获得网卡地址的代码,可以用来做软件许可证用.
- label可以写html代码。
- 【Opencv_contribute】Bouding Box (ROI,一行代码解决框选交互,可以用来标定)
- Android上传图片到服务器的代码怎么写(Android客户端代码和服务端代码)
- 一款可以用来实现网页拖拽得HTML代码
- freemarker 替换字符串,模板,可以用来动态生成代码
- 以前写过的几段分型算法的代码,用来测试2d图形性能还不错
- 职场人生(十一):代码不仅是用来运行的,更是用来看的
- 用户、组或角色 在当前数据库中已存在
- 初识MongoDB一
- C#159课的主要内容
- selenium常用资源的阿里镜像链接
- 指针、数组和字符串
- android 可以用来写代码的代码(JavaPoet)
- Oracle数据库:实例、用户、表、表空间
- @property, @sythesize,@dynamic
- [编程之美-03]字符串移位包含的问题
- CocoaPods(如有雷同请联系立删)
- HDU 1074 Doing Homework「状压dp」
- selenium switch_to.frame
- awk中使用shell中的变量
- IO总结