如何使用JavaPoet编写带@Value注解的参数并处理$符号问题?
问题解决:JavaPoet生成@Value注解时$符号转义问题
问题根源
JavaPoet中$是内置的占位符标识,直接写入单个$会被框架解析为变量占位符,从而引发语法错误。同时你原代码里的addMember方法调用格式也不符合JavaPoet的规则。
修正后的代码
ParameterSpec parameterOfConst = ParameterSpec.builder(String.class, className) .addAnnotation(AnnotationSpec.builder(Value.class) .addMember("value", "$S", "$$${topics." + className.toLowerCase() + ".command}") .build()) .build();
关键说明
- $符号转义:JavaPoet要求用两个
$$来表示输出一个$,所以$$$会最终生成${(前两个$$转义为单个$,第三个$是目标字符串里的正常字符) - 注解属性设置:
addMember的第一个参数要明确指定注解的属性名(@Value的核心属性是value),$S是JavaPoet的字符串占位符,会自动帮你包裹双引号,无需手动添加 - 完整构建:别忘了调用
.build()完成ParameterSpec的实例化,否则代码无法正常生成目标参数结构
内容的提问来源于stack exchange,提问作者Yardim Server
相关产品推荐
相关产品推荐

