我正在尝试为JDBC
创建一个通用行映射器。
因此,我的初始片段如下所示:
public class GenericRowMapper<T> implements RowMapper<T> {
private final Class<?> clazz;
public GenericRowMapper(T instance) {
this.clazz = instance.getClass().getComponentType();
}
@Override
public T mapRow(ResultSet rs, int rowNum) throws SQLException {
Field[] fields = clazz.getDeclaredFields();
for(Field f : fields){
System.out.println("field name : " + f.getName() + " , type : " + f.getType());
}
try {
return (T) clazz.getConstructor().newInstance();
} catch (NoSuchMethodException | InvocationTargetException | InstantiationException | IllegalAccessException e) {
e.printStackTrace();
return null;
}
}
}
但是在构造函数中,getComponentType()返回null,因此clazz=null 我无法取得任何进展。
我做错了什么?
谢谢
我做错了什么?
许多新手程序员都会犯这样的错误(有些专家也是如此!)。
您未能阅读文档。
如果这样做了,您可能已经注意到,getComponentType()的文档告诉您它返回数组的组件类型。
例如,给定类
很明显,您正在调用<代码>。getComponentType()在不表示数组类型的类上,因此,返回null。
您的代码相当混乱T是一个类型变量,因此,采用参数T instance意味着必须提供它的实际实例,即如果您有一个将行映射为字符串的行映射器,则必须提供一个没有意义的字符串。大概您实际想要的arg是类
. getDeclaredFields
()只返回类定义本身中的字段,而不是任何父类(其字段与任何其他实例一样是类的任何实例的一部分)-再次,阅读文档来解决这个问题。
“打印堆栈跟踪,返回null”是非常愚蠢的异常处理。正确的“我(还)不在乎它”异常处理程序是
抛出新的RuntimeException(“未处理”,e);
-更短,更好。没有理由不这样做。如果需要,请修复您的IDE模板。
许多现代的java(特别是包括
记录
功能)有一个不可变的类,因此您不能只是“设置”一堆字段,并且不会有一个无参数的构造函数(. getConstructor()
得到你,因此,. getConstructor()
会失败)。相反,构造函数本身接受所有参数;因此,您对字段不感兴趣,您对构造函数的参数感兴趣。除了可能有多个,并且类不(必要地)包含参数的名称。
目前我有一个DAO在做这样的事情: 而映射器则执行如下操作:(简化为该问题所需的内容) 作为JsonB字段存储在Aurora中。我读过一些关于注释的文章,但由于jdbi文档不清楚,所以我不确定这是否正确。 我映射结果的方式是“标准”方式吗?还是有更好/更有效的方式? 谢谢
怎么做?没有找到可以基于类型动态映射的示例。我发现这种方法在、Google中都非常方便。感谢你的帮助!
Java在Map接口中提供了通用支持。 语法 (Syntax) Set<T> set = new HashSet<T>(); 哪里 set - Set Interface的对象。 T - 在set声明期间传递的泛型类型参数。 描述 (Description) T是传递给通用接口Set及其实现类HashSet的类型参数。 例子 (Example) 使用您选择的任何编辑器创建以下Java程序。 pa
大家晚上好,我正在尝试用controller/Service/Dao/DaoImpl/和Mapper实现一个jdbctemplate模型。。。但从模型来看,映射器需要实现RowMapper或ParameterizedRowMapper,两者都有一个不返回列表的maprow方法。当我需要一个列表时,我在映射器中实现了一个方法来获得我需要的列表。但我不知道该怎么称呼它。在customerList方法中
我试图通过嵌套的数组使用JSX映射代码。 这是: 以及迄今为止我提出的代码: 这就是我得到的错误: 我做错了什么?
当我尝试通过枚举将源中的字符串映射到目标中的整数时。ModelMapper失败。 来源 目的地 字符串和整数之间的映射在枚举中定义