2016-05-13 261 views
1

我有一個AnnotationExpr,我如何獲取參數及其註釋的值(例如,@UnityBridge(fullClassName = "test") - 如何獲取fullClassName參數的值)。 JavaParser支持這個嗎?JavaParser AnnotationExpr獲取參數

我必須接受另一位訪客嗎?在這種情況下哪一個?

回答

1

遲到的回答,我來到了同樣的問題,只是投了AnnotationExpr到下列之一:

MarkerAnnotationExpr(對於無參數),

SingleMemberAnnotationExpr(單參數),

NormalAnnotationExpr (用於多個參數)。

您可能需要instanceof來確定當前註釋類型。

0

我更喜歡這種方法沒有的instanceof和搜索按類型而不是孩子,但你仍然需要一個單一的參數區分,而不鍵查找參數「值」:

private static final String VALUE = "value"; 

public static Expression getValueParameter(AnnotationExpr annotationExpr){ 
    Expression expression = getParamater(annotationExpr, VALUE); 
    if(expression == null){ 
     List<Expression> children = annotationExpr.getChildNodesByType(Expression.class); 
     if(!children.isEmpty()){ 
      expression = children.get(0); 
     } 
    } 
    return expression; 
} 

public static Expression getParamater(AnnotationExpr annotationExpr, String parameterName){ 
    List<MemberValuePair>children = annotationExpr.getChildNodesByType(MemberValuePair.class); 
    for(MemberValuePair memberValuePair : children){ 
     if(parameterName.equals(memberValuePair.getNameAsString())){ 
      return memberValuePair.getValue(); 
     } 
    } 
    return null; 
}