我正在尝试将List<Field>
转换为简单的字符串,但不确定如何将它们从数组中解析为单个String
变量。
我当前正在使用一种方法,该方法将遍历使用getDeclaredFields()
方法的类并将其输出到数组中。
public static List<Field> getInheritedPrivateFields(Class<?> type) {
List<Field> result = new ArrayList<Field>();
Class<?> i = type;
while (i != null && i != Object.class) {
Collections.addAll(result, i.getDeclaredFields());
i = i.getSuperclass();
}
for(Field temp : result) {
System.out.println(temp);
}
return result;
}
输出时得到的结果是
[private int com.gen.e.ric.report.domain.TestCount.count,
private java.lang.String com.gen.e.ric.report.domain.Test.facility,
private java.lang.String com.gen.e.ric.report.domain.Test.technology,
private java.lang.String com.gen.e.ric.report.domain.Test.component,
private java.util.List com.gen.e.ric.report.domain.Test.etestStats,
private java.util.Date com.gen.e.ric.report.domain.Test.startDate,
private java.util.Date com.gen.e.ric.report.domain.Test.endDate]
我想得到的只是一个长字符串
int, String, String, List, Date, Date
有什么要给的吗?使用反射顺便说一句。 谢谢。
答案 0 :(得分:3)
您只想输出每个Field
的类型,所以可以这样做:
for(Field temp : result) {
System.out.println(temp.getType());
}
或为了将其放入String
:
String types = result.stream().map(e->e.getType().getSimpleName()).collect(Collectors.joining(","));
答案 1 :(得分:3)
输出格式类似于Field
类toString
方法,其实现方式如下:
public String toString() {
int mod = getModifiers();
return (((mod == 0) ? "" : (Modifier.toString(mod) + " "))
+ getType().getTypeName() + " "
+ getDeclaringClass().getTypeName() + "."
+ getName());
}
请注意:
Class & Field
类都是final
,所以您can't override
因此,您不能更改Field的toString定义。但是,您可以像下面那样构建自己的String:
String s = result.stream().map(e -> e.getDeclaringClass().getSimpleName()).collect(Collectors.joining(", "));
System.out.println(s);
答案 2 :(得分:2)
您可以使用getSimpleName()
。例如:
String.class.getSimpleName();
在您的示例中,您所需要做的就是:
for (Field temp : result) {
System.out.println(temp.getType().getSimpleName());
}
所以您的方法现在看起来像:
public static String getInheritedPrivateFields(Class<?> type) {
List<Field> result = new ArrayList<Field>();
Class<?> i = type;
while (i != null && i != Object.class) {
Collections.addAll(result, i.getDeclaredFields());
i = i.getSuperclass();
}
return result.stream()
.map(field -> field.getType().getSimpleName())
.collect(Collectors.joining(", "));
}
答案 3 :(得分:2)
您可以使用Field.getType()
来获取Class
中的Field
,然后使用Class.getSimpleName()
来仅获取所需的部分:
List<String> types = new ArrayList<>();
Field[] declaredFields = Person.class.getDeclaredFields();
for (Field declaredField : declaredFields) {
// Will give [class java.lang.String, class java.lang.String, int]
// types.add(declaredField.getType().toString());
// Will give [String, String, int]
types.add(declaredField.getType().getSimpleName());
}
System.out.println(types);
[String,String,int]