public class Book {
private String title;
private Author author;
}
public class Author {
private String name;
private Integer age:
}
这里Book是根类,即最终的CSV将命名为books.CSV。
使用book.class.getDeclaredFields()
,我们只获得字段名title和author,但是我们还需要来自author类的字段名(name和age),有没有方法获得这些字段名?
备注:
给定您的模型,它将返回一个包含以下元素的列表:
ClassMetadataService cms = new ClassMetadataService();
List<String> properties = cms.getProperties(Book.class);
package io.metadata;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class ClassMetadataService {
public List<String> getProperties(Class clazz) {
List<String> properties = new ArrayList<>();
this.collectProperties(new ArrayList<>(), clazz, properties);
return properties;
}
private void collectProperties(List<String> pathNodes, Class clazz, List<String> properties) {
for (Field field : clazz.getDeclaredFields()) {
List<String> localPathNodes = new ArrayList<>(pathNodes);
localPathNodes.add(field.getName());
if (clazz.isPrimitive() || isJavaClass(field.getType())) {
properties.add(localPathNodes.stream().collect(Collectors.joining(".")));
} else {
collectProperties(localPathNodes, field.getType(), properties);
}
}
}
private Boolean isJavaClass(Class clazz) {
List<Class> javaClass = Arrays.asList(
// ....
Boolean.class,
Byte.class,
Short.class,
Integer.class,
Long.class,
Float.class,
Double.class,
BigDecimal.class,
BigInteger.class,
Character.class,
String.class,
LocalDate.class,
LocalDateTime.class
// ....
);
return javaClass.stream().anyMatch(jc -> jc.equals(clazz));
}
}
我有这个问题。但我很难解释,因为我不知道确切的术语。希望有人能理解。我会尽力描述。我觉得这与
问题内容: 我有文本框,在另一个面板中有保存按钮。如果单击保存按钮,则必须获取第一个面板文本框的值。 如何访问? 问题答案: 只需将TextField设置为Public Static dats即可。然后您可以使用ClassName.TextFiledName访问TextField
问题内容: 我有两节课 在ABC班 我想在另一个课程中使用它,让我们说DEF课程 但是它说java.lang.NullPointerException,你知道吗?谢谢 这是我的ABC类的代码,我想在另一类> _ <中使用它们 问题答案: 您需要在内存中分配ABC,否则它指向,因此NullPointerException: 编辑 :好的,如果ABC没有像这样的零参数构造函数: 您有两种选择来解决您的
问题内容: 我的目标是为此激发一个应用程序的时序图,我需要在运行时提供有关调用方和被调用方类名称的信息。我可以成功检索调用者函数,但无法获得调用者类名称吗? 当我打印堆栈时,没有有关调用程序类的信息。那么有可能在运行时检索调用方类吗? 问题答案: 好吧,在按提示进行了一些挖掘之后,这是我得到的: 调用时: 给定文件: 不知道从其他对象调用该对象时的行为。
null null
我需要创建三个类:客户、产品和订单。我希望我的orders类接受来自客户和产品的实例(即,能够让一个订单包含关于客户和他们正在订购的产品的信息)。在JavaScript中设置这一点的最佳方法是什么?我最初想让我的customer和products类扩展order类,但我是否能够让order同时扩展customer和products类?