Java 需要一些关于以抽象方式调用方法和字段的技巧吗

Java 需要一些关于以抽象方式调用方法和字段的技巧吗,java,reflection,invoke,Java,Reflection,Invoke,我有一个方法,我不知道如何处理其中的一部分,它是以感叹号开头的评论:“/!!这是我关心的部分…” 有没有一种最佳方法可以做到这一点,而不必像这样处理每一种参数类型?我的意思是,这对我来说似乎是一种开销?switch语句会更简洁,但除非你想加入真正的ORM解决方案,比如JDO、JPA、hibernate等等。。你必须这么做。你担心什么?如果你说的“开销”是指CPU周期,那么你应该更关心你正在做的所有反射,而不是一堆If/else语句。如果你关心的是维护,是的,这将是大量的代码。也就是说,如果你只映

我有一个方法,我不知道如何处理其中的一部分,它是以感叹号开头的评论:“/!!这是我关心的部分…”


有没有一种最佳方法可以做到这一点,而不必像这样处理每一种参数类型?我的意思是,这对我来说似乎是一种开销?

switch语句会更简洁,但除非你想加入真正的ORM解决方案,比如JDO、JPA、hibernate等等。。你必须这么做。你担心什么?如果你说的“开销”是指CPU周期,那么你应该更关心你正在做的所有反射,而不是一堆If/else语句。如果你关心的是维护,是的,这将是大量的代码。也就是说,如果你只映射了十几种类型。。。这其实没什么大不了的。除了使用现成的ORM工具之外,这里实际上没有任何快捷方式。

您可以首先从
结果集构建地图。此
map
包含列名及其相应的值

Map<String, String> map = new HashMap<>();
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
for (int column = 1; column <= columnCount; column++) {
    map.put(metaData.getColumnName(column), rs.getString(column));
}
return map;
这类课程有:

通过反射填充JavaBeans属性的实用方法


您可以根据需要对查询进行修改。

这对我来说似乎是一种开销?对探查器来说,这似乎是一种负担?也许是时候使用JPA(Java持久化API)了?JPA提供了数据库值到Java对象的自动映射。对不起,我这次写这篇文章是指开销非常感谢你们所有人,优秀的答案为我指明了下一次遇到类似任务时可能使用的路径。另一个问题-反射对CPU有那么难吗?它们当然不容易处理。。。但这都是相对的。像groovy这样的动态语言和Spring一样广泛地使用反射。对于Spring,它主要在应用程序启动时,所以在运行时并不明显。对于groovy,这是它比vanilla java慢很多的原因之一。
Map<String, String> map = new HashMap<>();
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
for (int column = 1; column <= columnCount; column++) {
    map.put(metaData.getColumnName(column), rs.getString(column));
}
return map;
Person person = new Person();
BeanUtils.populate(person, map);