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

标签 java generics

我使用 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/

相关文章:

java - 多JSONarray问题

java - java wicket 中什么时候调用 detachableloadablemodel 的加载?

java - 嵌套框算法 - 基于嵌套娃娃但根本不同?

c# - 如何使用 CaSTLe Windsor 注册通用装饰器?

Java - 绑定(bind)到特定子类的通用数字方法签名

swift - 访问类实异常(exception)部的泛型类类型

Java - 将对象存储在遵循其类继承的层次结构中

java - 创建类的实例并初始化其所有字段

c# - 限制类型参数

Swift - 在 switch 语句中绑定(bind)泛型参数