我正在使用Elements.getElementValuesWithDefaults来检索注释值。
返回的Map的键是扩展ExecutableElement的键。我可以遍历entrySet并检查每个键的名称,但这会导致难看的if-else-cascades。

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();
}


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

10-04 21:04