作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
是否有可能打印出类中每个字段的名称和类型?现在我有以下代码
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/
我是一名优秀的程序员,十分优秀!