2014-02-13 57 views
0

我使用Elements.getElementValuesWithDefaults来检索注释值。 返回的地图的关键是延伸ExecutableElement。我可以迭代entrySet并检查每个键的名称,但这会导致丑陋的if-else-cascades。注释处理 - 创建ExecutableElement

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作为获取值的关键。任何人都知道吗?

回答

1

您可以使用runnables的地图。

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接口。

+0

不完全是我想到的,但解决了我的问题。谢谢! – lefloh