java - AnnotationProcessing - 创建可执行元素

标签 java annotation-processing

我正在使用Elements.getElementValuesWithDefaults检索注释值。 返回的 Map 的键是扩展 ExecutableElement 的东西。我可以迭代 EntrySet 并检查每个键的名称,但这会导致丑陋的 if-else 级联。

Map<? extends ExecutableElement, ? extends AnnotationValue> annotationValues = 
    elementUtils.getElementValuesWithDefaults(annotationMirror);
for (Map.Entry<? extends ExecutableElement, ? extends AnnotationValue> entry : annotationValues.entrySet()) {
    if (entry.getKey().getSimpleName().contentEquals("method1")) {
        // do something with value of method1
    } else if (entry.getKey().getSimpleName().contentEquals("method2")) {
        // do something with value of method2
    } else if (entry.getKey().getSimpleName().contentEquals("method3")) {
        // do something with value of method3
    }
}           

我没有找到一种简单的方法来创建 ExecutableElement 作为获取值的键。有人知道吗?

最佳答案

您可以使用可运行映射。

Map<String, Runnable> map = new HashMap();
map.put("method1", new Runnable() { ... });
map.put("method2", new Runnable() { ... });
map.put("method3", new Runnable() { ... });

for (Map.Entry entry : ...) {
   map.get(entry.getKey().getSimpleName()).run();
}

我猜您想将条目传递到方法中,因此您可能需要自定义接口(interface)而不是 Runnable。

关于java - AnnotationProcessing - 创建可执行元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21750913/

相关文章:

Java-我没有从 for 循环和 if 语句中获得输出

java - 如何在java android中对数字进行排序?

java - 即使第一个线程使用 ReentrantLock 锁定,第二个线程也会执行

android - 如何使我自己的注释处理器增量?

java - 为什么 IntelliJ 需要 Lombok 插件?

java - Guice:为共享库创建注入(inject)器

java - Jenkins 运行被匿名 : The user id should be always non-null thanks to DefaultUserCanonicalIdResolver 中止

java - Spring Boot创建自定义注释来获取登录用户?

android - 注解处理时从/src和/build中扫描源文件

kotlin - 在 Kotlin 注释处理期间如何访问方法体?