gpt4 book ai didi

java - 遍历泛型类

转载 作者:搜寻专家 更新时间:2023-11-01 08:51:26 26 4
gpt4 key购买 nike

是否有可能打印出类中每个字段的名称和类型?现在我有以下代码

try {
for (Field field : obj.getClass().getDeclaredFields()) {
System.out.println("User Preferences " + field.getName()
+ " - " + field.getType());
}
}catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

显示:

User Preferences customer - class java.lang.String
User Preferences token - class java.lang.String
User Preferences class1 - class com.activity.webservice.Login$Class1

这就是我(几乎)想要得到的。

问题是让它进入自定义类 Class1。 Class1 类中可以有多个类,也可以没有类。 Class1 类可以有多个字段或没有字段。

我想要这样的东西打印出来

User Preferences customer - class java.lang.String
User Preferences token - class java.lang.String
User Preferences class1 - class com.activity.webservice.Login$Class1
User Preferences string1 - class java.lang.String
User Preferences class2 - class com.activity.webservice.Login$Class2
User Preferences string2 - class java.lang.String
User Preferences string3 - class java.lang.String

如何遍历未知数量的字段和类?

感谢您的帮助

编辑

这是我的登录类的结构

public class Login {

public String token;
public String customerid;
public Class1 class1;

public class Class1 {
public Class2 class2;
public String string1;

public class Class2 {
public int int1;
public String string2;
public String string3;
}
}
}

最佳答案

以下是如何递归执行此操作的一般思路。只需传入您想要字段的类,它也应该递归检查所有子类的字段。

// Call this method to get the list of fields.
public static List<String> getAllFields(Class<?> clazz) {
List<String> results = new ArrayList<String>();
getFieldDescsForClass(clazz, results);
return results;
}

private static void getFieldDescsForClass(Class<?> clazz, List<String> outList) {
// Loop over all the fields and add the info for each field
for (Field field : clazz.getDeclaredFields()) {
// Ignore synthetic fields
if (!field.isSynthetic()) {
outList.add(String.format("User Preferences %s - %s", field.getName(), field.getType()));
}
}

// For any internal classes, recursively call this method and add the results
// (which will in turn do this for all of that subclass's subclasses)
for (Class subclazz : clazz.getDeclaredClasses()) {
getFieldDescsForClass(subclazz, outList);
}
}

关于java - 遍历泛型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23020676/

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