操作系统原理与linux实践教程,JavaPoet的使用指南

本文详细介绍了JavaPoet库中的常用类和方法,如TypeSpec用于生成各类Java对象,MethodSpec和ParameterSpec用于构建方法,以及如何设置修饰符、注解、注释和实例化。涵盖了类、接口、枚举、构造方法、方法参数等内容。
摘要由CSDN通过智能技术生成

JavaPoet的常用类

  1. TypeSpec————用于生成类、接口、枚举对象的类
  2. MethodSpec————用于生成方法对象的类
  3. ParameterSpec————用于生成参数对象的类
  4. AnnotationSpec————用于生成注解对象的类
  5. FieldSpec————用于配置生成成员变量的类
  6. ClassName————通过包名和类名生成的对象,在JavaPoet中相当于为其指定Class
  7. ParameterizedTypeName————通过MainClass和IncludeClass生成包含泛型的Class
  8. JavaFile————控制生成的Java文件的输出的类

JavaPoet的常用方法

设置修饰关键字

addModifiers(Modifier… modifiers)

Modifier是一个枚举对象,枚举值为修饰关键字Public、Protected、Private、Static、Final等等。 所有在JavaPoet创建的对象都必须设置修饰符(包括方法、类、接口、枚举、参数、变量)。

设置注解对象

addAnnotation(AnnotationSpec annotationSpec)
addAnnotation(ClassName annotation)
addAnnotation(Class<?> annotation)

该方法即为类或方法或参数设置注解,参数即可以是AnnotationSpec,也可以是ClassName,还可以直接传递Class对象。 一般情况下,包含复杂属性的注解一般用AnnotationSpec,如果单纯添加基本注解,无其他附加属性可以直接使用ClassName或者Class即可。

设置注释

addJavadoc(CodeBlock block)
addJavadoc(String format, Object… args)

在编写类、方法、成员变量时,可以通过addJavadoc来设置注释,可以直接传入String对象,或者传入CodeBlock(代码块)。

JavaPoet生成类、接口、枚举对象

在JavaPoet中生成类、接口、枚举,必须得通过TypeSpec生成,而classBuilder、interfaceBuilder、enumBuilder便是创建其关键的方法:

创建类:
TypeSpec.classBuilder("类名“)
TypeSpec.classBuilder(ClassName className)

创建接口:
TypeSpec.interfaceBuilder(“接口名称”)
TypeSpec.interfaceBuilder(ClassName className)

创建枚举:
TypeSpec.enumBuilder(“枚举名称”)
TypeSpec.enumBuilder(ClassName className)

继承、实现接口

继承类:
.superclass(ClassName className)

实现接口
.addSuperinterface(ClassName className)

继承存在泛型的父类

当继承父类存在泛型时,需要使用ParameterizedTypeName

ParameterizedTypeName get(ClassName rawType, TypeName… typeArguments)

返回的ParameterizedTypeName对象,已经被添加泛型信息

方法

addMethod(MethodSpec methodSpec)

通过配置MethodSpec对象,使用addMethod方法将其添加进TypeSpec中。

枚举

addEnumConstan(String enumValue)

通过addEnumConstan方法添加枚举值,参数为枚举值名称。

JavaPoet生成成员变量

JavaPoet生成成员变量是通过FieldSpec的build方法生成.

builder(TypeName type, String name, Modifier… modifiers)

只要传入TypeName(Class)、name(名称)、Modifier(修饰符),就可以生成一个基本的成员变量。

成员变量一般来说由注解(Annotation)、修饰符(Modifier)、Javadoc(注释)、initializer(实例化)。

注解

addAnnotation(TypeName name)

修饰符

addModifiers(Modifier …modifier)

注释

addJavadoc(String format, Object… args)

由于上述三个方法,都在通用方法介绍过这里就不再重复介绍。

实例化

initializer(String format, Object… args)

即成员变量的实例化,例:

public Activity mActivity = new Activity;

initializer方法中的内容就是“=”后面的内容,下面看下具体的代码实现,上面的成员变量:

ClassName activity = ClassName.get(“android.app”, “Activity”);
FieldSpec spec = FieldSpec.builder(activity, “mActivity”)
.addModifiers(Modifier.PUBLIC)
.initializer(“new $T”, activity)
.build();

JavaPoet生成方法

JavaPoet生成方法分为两种,第一种是构造方法,另一种为常规的方法。

构造方法

MethodSpec.constructorBuilder()

常规方法

MethodSpec.methodBuilder(String name)

方法的主要构成有方法参数、注解、返回值、方法体、抛出异常五种,注解可以参考通用方法addAnnotation,其他方法我们将会一一介绍:

方法参数

addParameter(ParameterSpec parameterSpec)

设置方法参数的方法通过addParameterSpec来实现,ParameterSpec的具体使用参考下一小节。

返回值

returns(TypeName returnType)

设置方法的返回值,只需传入一个TypeName对象,而TypeName是ClassName,ParameterizedTypeName的基类。

方法体

在JavaPoet中,设置方法体内容有两个方法,分别是addCode和addStatement:

addCode()

addStatement()

这两个本质上都是设置方法体内容,但是不同的是使用addStatement()方法时,你只需要专注于该段代码的内容,至于结尾的分号和换行它都会帮你做好。 而addCode()添加的方法体内容就是一段无格式的代码片,需要开发者自己添加其格式。

方法体模板

在JavaPoet中,设置方法体使用模板是比较常见的,因为addCode和addStatement方法都存在这样的一个重载:

addCode(String format, Object… args)

addStatement(String format, Object… args)

在JavaPoet中,format中存在三种特定的占位符:

$T

$T 在JavaPoet代指的是TypeName,该模板主要将Class抽象出来,用传入的TypeName指向的Class来代替。

ClassName bundle = ClassName.get(“android.os”, “Bundle”);
addStatement(“$T bundle = new $T()”,bundle)

上述添加的代码内容为:

Bundle bundle = new Bundle();

$N

$N在JavaPoet中代指的是一个名称,例如调用的方法名称,变量名称,这一类存在意思的名称

addStatement(“data.$N()”,toString)

上述代码添加的内容:

data.toString();

$S

S 在 J a v a P o e t 中就和 S t r i n g . f o r m a t 中 S在JavaPoet中就和String.format中%s一样,字符串的模板,将指定的字符串替换到 SJavaPoet中就和String.formatS的地方

.addStatement(“super.$S(savedInstanceState)”,“onCreate”)

即将"onCreate"字符串代替到$S的位置上.

抛出异常

.addException(TypeName name)

设置方法抛出异常,可以使用addException方法,传入指定的异常的ClassName,即可为该方法设置其抛出该异常.

JavaPoet生成方法参数

JavaPoet生成有参方法时,需要填充参数,而生成参数则需要通过ParameterSpec这个类。

addParameter(ParameterSpec parameterSpec)

初始化ParameterSpec

ParameterSpec.builder(TypeName type, String name, Modifier… modifiers)

给参数设置其Class,以及参数名称,和修饰符.

通常来说参数的构成包括:参数的类型(Class)、参数的名称(name)、修饰符(modifiers)、注解(Annotation)

除了builder方法初始化类型、以及名称、修饰符之外,其余可以通过如下方法进行设置:

添加修饰符

.addModifiers(Modifier modifier)

添加注解

addAnnotation(TypeName name)

添加修饰符、注解具体使用可参考通用方法。

JavaPoet生成注解

在JavaPoet创建类、成员变量、方法参数、方法,都会用到注解。

如果使用不包含属性的注解可以直接通过

.addAnnotation(TypeName name)

直接传入TypeName或者Class进行设置。

如果使用的注解包含属性,并且不止一个时,这时候就需要生成AnnotationSpec来解决,下面简单了解下AnnotationSpec。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

无论是哪家公司,都很重视基础,大厂更加重视技术的深度和广度,面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。

针对以上面试技术点,我在这里也做一些分享,希望能更好的帮助到大家。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。

针对以上面试技术点,我在这里也做一些分享,希望能更好的帮助到大家。

[外链图片转存中…(img-kNOIH7hI-1713468620109)]

[外链图片转存中…(img-fK2d6W14-1713468620110)]

[外链图片转存中…(img-GAVA2TfE-1713468620110)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 24
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android是一个开放的移动操作系统,爱好者和开发者可以根据自己的需求进行定制和开发。在Android开发中,JavaPoet是一个非常有用的库,可以动态生成Java代码,简化一些重复的工作。而AOP(面向切面编程)则是一种编程范式,可以将横切关注点与业务逻辑分离,提高代码的可复用性和可维护性。 动态权限申请是Android开发中经常遇到的一个问题。在Android系统中,一些敏感的操作和资源访问需要动态申请权限,以确保用户的隐私和安全。传统的权限申请方式是在每个需要权限的地方都进行判断和申请,这样会导致代码的冗余和可读性的下降。使用AOP结合JavaPoet可以实现动态权限申请的解决方案。 首先,我们可以通过AOP在需要权限的方法周围添加一个切面,用于检查和申请权限。通过AspectJ等AOP框架,我们可以定义一个切面,在方法执行之前和之后执行相应的逻辑。 然后,利用JavaPoet动态生成申请权限的代码。我们可以定义一个注解,用于标识需要权限的方法。在AOP切面中,当检测到方法上有该注解时,生成相应的权限申请代码。 最后,在代码编译阶段,通过JavaPoet生成的代码会自动插入到原始代码中。这样,我们就可以在运行时动态地进行权限的申请了。 通过以上的实践,我们可以实现动态权限申请的功能,同时可以减少重复的代码,并提高代码的可维护性。使用JavaPoet和AOP相结合的方式,可以使我们的开发变得更加高效和便捷。它们为Android开发带来了更多的灵活性和扩展性,帮助我们更好地应对权限申请的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值