我想创建简单的自定义注释,它能够将类字符串字段切换为大写。 我自己创建了注释界面:
@Documented
@Target(ElementType.FIELD)
@Inherited
@Retention(RetentionPolicy.SOURCE)
public @interface ToUpperCaseAnn {
String info() default "No String value";
}
和处理器类:
@SupportedAnnotationTypes("org.example.ToUpperCaseAnn")
@SupportedSourceVersion(SourceVersion.RELEASE_11)
@AutoService(Processor.class)
public class ToUpperCaseAnnProcessor extends AbstractProcessor{
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
for (TypeElement annotation : annotations) {
Set<? extends Element> annotatedElements = roundEnv.getElementsAnnotatedWith(annotation);
for (Element annotatedElement : annotatedElements) {
annotatedElement.toString().toUpperCase();
}
}
return true;
}
}
我还修改了 pom.xml 文件:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<compilerArgument>
-proc:none
</compilerArgument>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
</plugins>
</build>
在我尝试通过将它添加到主类中的字段来测试此注释之后:
public class Main {
@ToUpperCaseAnn()
static String ts = "abs";
public static void main(String[] args) {
System.out.println(ts);
}
}
但是输出是小写的——“abc”
所以,我的处理器类似乎根本没有被编译器使用过。
我的问题是:
如何将处理器类添加到“编译器范围”?我认为@SupportedAnnotationTypes 就足够了:)
即使编译器将使用处理器类,它也会工作吗?就像我修改元素但我不明白他们在哪里以及如何修改:(
for (Element annotatedElement : annotatedElements) {
annotatedElement.toString().toUpperCase();
}