gpt4 book ai didi

java - 如何获取 TypeDeclaration 对象中的字段名称?

转载 作者:行者123 更新时间:2023-11-30 06:16:04 24 4
gpt4 key购买 nike

我对 java 很陌生。我正在尝试创建一个项目,从所需的 .java 文件(HelloOOPP.java)获取类名、字段名。我成功获取了类名,但我在字段名上遇到了问题。

它返回以下文本而不是 HelloOOPP 类字段名称(输出)(我期望获得 x 和 y 字段):

Class name:HelloOOPP
Fields:
NODE_BY_BEGIN_POSITION
ABSOLUTE_BEGIN_LINE
ABSOLUTE_END_LINE
SYMBOL_RESOLVER_KEY

App.java 文件:

package com.app;
import java.io.File;
import java.io.FileNotFoundException;

public class App
{
public static void main(String[] args) throws FileNotFoundException {
System.out.println(GetTypes.parseClassname(new File("C:\\HelloOOPP.java")));
}
}

GetTypes.java 文件:

package com.app;
import com.github.javaparser.*;
import com.github.javaparser.ast.*;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.body.*;
import java.io.*;
import java.lang.reflect.Field;
public class GetTypes {
public static String parseClassname(File filename) throws FileNotFoundException {
FileInputStream fin = new FileInputStream(filename);
CompilationUnit cu = JavaParser.parse(fin);
StringBuilder build=new StringBuilder();
for (TypeDeclaration type : cu.getTypes())
{
if (type.isClassOrInterfaceDeclaration())
{
build.append("Class name:");
build.append(type.getName());
build.append("\n");
build.append("Fields:");
build.append("\n");
build.append(Get_Fields(type));
}
}
return build.toString();
}
private static StringBuilder Get_Fields(TypeDeclaration c) //Get all field names
{
Field[] fields = c.getClass().getFields();
StringBuilder str=new StringBuilder();
for(int i=0;i<fields.length;i++)
{
str.append(fields[i].getName());
str.append("\n");
}
return str;
}
/*
private int Count_Fields(TypeDeclaration c)
{

}*/
}

HelloOOPP.java 文件:

public class HelloOOPP
{
public int x;
public int y;
}

最佳答案

您正在混合 Javaparser 和经典反射。

当你写

Field[] fields = c.getClass().getFields();

,你得到的是 TypeDeclaration 中的字段类,而不是 HelloOOPP 类(这就是为什么您会看到意外的字段名称,例如 ABSOLUTE_BEGIN_LINE)。

基于问题How to get class level variable declarations using javaparser ? ,您的方法可能如下所示:

 private static StringBuilder Get_Fields(TypeDeclaration c) //Get all field names
{
List<BodyDeclaration> members = c.getMembers();
StringBuilder str=new StringBuilder();

if(members != null) {
for (BodyDeclaration member : members) {

//Check just members that are FieldDeclarations
FieldDeclaration field = (FieldDeclaration) member;

str.append(field.getVariables().get(0).getId().getName());
str.append("\n");

}

}

return str;
}

关于java - 如何获取 TypeDeclaration 对象中的字段名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49176096/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com