简单的自定义注解Java

问题描述 投票:0回答:0

我想创建简单的自定义注释,它能够将类字符串字段切换为大写。 我自己创建了注释界面:

@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”

所以,我的处理器类似乎根本没有被编译器使用过。

我的问题是:

  1. 如何将处理器类添加到“编译器范围”?我认为@SupportedAnnotationTypes 就足够了:)

  2. 即使编译器将使用处理器类,它也会工作吗?就像我修改元素但我不明白他们在哪里以及如何修改:(

for (Element annotatedElement : annotatedElements) {
                annotatedElement.toString().toUpperCase();
            }
java spring-boot annotations
© www.soinside.com 2019 - 2024. All rights reserved.