2014-02-13 84 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