gpt4 book ai didi

java - Java 中的参数化原始类型

转载 作者:行者123 更新时间:2023-12-02 06:29:00 25 4
gpt4 key购买 nike

我使用 Eclipse IDe 和 Apache Commons DBUtils 库,并且我有一些从 BasicRowProcessor class 扩展的自己的行处理器类。 。在本类(class)中,我将重写这两个 DButils 的方法:

public <T> T toBean(ResultSet rs, Class<T> type) throws SQLException

public <T> List<T> toBeanList(ResultSet rs, Class<T> type) throws SQLException

我的toBeanList的实现方法如下:

   @Override
public LinkedList<Object> toBeanList(ResultSet rs, Class clazz) {
try {
LinkedList<Object> newlist = new LinkedList<Object>();
while (rs.next()) {
newlist.add(toBean(rs, clazz));
}
return newlist;
} catch (SQLException ex) {
throw new RuntimeException(ex);
}
}

我循环遍历 ResultSet并调用toBean其所有记录的方法。它可以工作,但是 Eclipse 报告了一些问题(可能与 Java 泛型有关),请参阅此屏幕截图:

enter image description here

当我设置参数clazz时参数为 Class<TaskItem> clazz Eclipse 报告另一个问题,它没有覆盖上层类中的方法 BasicRowProcessor .

enter image description here

如何解决这个问题?我究竟做错了什么?或者忽略这个警告是否安全?也许解决这个问题很容易,但我还没有找到解决方案。

编辑:

我尝试参数化我的两个方法,但 Eclipse 报告我需要重写父类(super class)型。

toBeanList方法:

@Override
public LinkedList<TaskItem> toBeanList(ResultSet rs, Class<TaskItem> clazz) {
try {
LinkedList<TaskItem> newlist = new LinkedList<TaskItem>();
while (rs.next()) {
newlist.add(toBean(rs, clazz));
}
return newlist;
} catch (SQLException ex) {
throw new RuntimeException(ex);
}
}

toBean方法:

@Override
public TaskItem toBean(ResultSet rs, Class<TaskItem> clazz) throws SQLException {

TaskItem item = new TaskItem();
// some stuff....
return item;

}

这个 Eclipse 报告:

enter image description here

最佳答案

你使用

public <T> List<T> toBeanList(ResultSet rs, Class<T> type) throws SQLException

该类型的占位符是 T 。这意味着结果列表是 T 的列表。作为参数传递的类是 Class<T> 。因此,当您想要 LinkedList<Object> 时你需要通过 Class<Object>到方法。

当你想传递Class<TaskItem>时您将得到 LinkedList<TaskItem> 。因此它将是

public List<TaskItem> toBeanList(ResultSet rs, Class<TaskItem> type) throws SQLException

关于java - Java 中的参数化原始类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20239087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com