我只想得到类级别的变量声明。如何使用javaparser获取声明?
public class Login {
private Keyword browser;
private String pageTitle = "Login";
}
使用javaparser必须获取变量“浏览器”的详细信息,例如浏览器的类型是“KeyWord”
要将上述答案更新为最新版本的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()));
}
});
}
}
一种无需太多麻烦就可以到达现场声明的方法是。。。
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()));
});
});
两者之间的功能区别在于,第一个只在顶级类中查找,第二个也将在嵌套类中查找。
我不太明白你的问题-你想得到一个类的所有字段成员吗?如果是这样,你可以这样做:
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());
}
}
}
此代码示例将在您的案例中打印:Keyword browser String pageTitle“Login”
我希望这真的是你的问题...如果没有,请评论。
我能够使用以下代码获得类级变量的声明。但我只需要变量名。这是以下代码的输出-[私有布尔标志=true;]
这是A.java 我想得到Newa. java 我想使用javaparser添加一个变量。
我正在分析的类: 我正在尝试使用MethodDeclaration获取变量名,但无法做到这一点。 我正在尝试获取此is的输出。 verifyAgeLimit():此。名称或名称 verifyAgeLimit():此。名称或名称 showAddress():此。地址或地址 我试图将整个方法转换为sting并读取字符串以找出名称,但它变得太复杂,而且精度也很低。 有什么办法可以解决吗?
例如,我可以获得开始行和结束行,但是如何获得开始行和结束行之间的源代码呢。下面是示例代码。 我想得到下面的代码,这是与cmds相关的定义。
是否可以获取不带注释的方法语句列表,我使用了,这是输出 我只想声明结果是这样的
react用vite搭建的项目 想要做代码提示,必须声明variables的类型,不想再像下面这样写一遍。 想直接根据scss中定义的变量生成类型声明,要怎么做?类似 但是因为variables是个cssmodule,而不是个具体的对象,上面的写法还是不行? 有没有好的方式解决?