How to get class level variable declarations using javaparser ?

北城余情 提交于 2019-12-02 14:11:16

问题


I want to get only the class level variable declarations. How can i get the declarations using javaparser?

public class Login {

    private Keyword browser;
    private String pageTitle = "Login";
}

Using javaparser have to get the details of variable "browser" like the type of browser is "KeyWord"


回答1:


Not quite sure i understood your question - do you want to get all the field-members of a class? if so you can do it like this:

CompilationUnit cu = JavaParser.parse(javaFile);
for (TypeDeclaration typeDec : cu.getTypes()) {
    List<BodyDeclaration> members = typeDec.getMembers();
    if(members != null) {
        for (BodyDeclaration member : members) {
        //Check just members that are FieldDeclarations
        FieldDeclaration field = (FieldDeclaration) member;
        //Print the field's class typr
        System.out.println(field.getType());
        //Print the field's name 
        System.out.println(field.getVariables().get(0).getId().getName());
        //Print the field's init value, if not null
        Object initValue = field.getVariables().get(0).getInit();
        if(initValue != null) {
             System.out.println(field.getVariables().get(0).getInit().toString());
        }  
    }
}

This code example will print in your case: Keyword browser String pageTitle "Login"

I hope this was really your question... if not, please comment.




回答2:


To update the above answer to the latest version of JavaParser:

CompilationUnit cu = JavaParser.parse("public class Login {\n" +
        "\n" +
        "    private Keyword browser;\n" +
        "    private String pageTitle = \"Login\";\n" +
        "}\n");

for (TypeDeclaration<?> typeDec : cu.getTypes()) {
    for (BodyDeclaration<?> member : typeDec.getMembers()) {
        member.toFieldDeclaration().ifPresent(field -> {
            for (VariableDeclarator variable : field.getVariables()) {
                //Print the field's class typr
                System.out.println(variable.getType());
                //Print the field's name
                System.out.println(variable.getName());
                //Print the field's init value, if not null
                variable.getInitializer().ifPresent(initValue -> System.out.println(initValue.toString()));
            }
        });
    }
}

and a way to get to the field declarations without as much hassle is...

cu.findAll(FieldDeclaration.class).forEach(field -> {
    field.getVariables().forEach(variable -> {
        //Print the field's class typr
        System.out.println(variable.getType());
        //Print the field's name
        System.out.println(variable.getName());
        //Print the field's init value, if not null
        variable.getInitializer().ifPresent(initValue -> System.out.println(initValue.toString()));
    });
});

The functional difference between the two is that the first one only looks in the top level class, and the second one will also look in nested classes.



来源:https://stackoverflow.com/questions/22680937/how-to-get-class-level-variable-declarations-using-javaparser

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!