泛型的类型确定-为什么实现类<T>的接口泛型设置为List<T>

泛型的类型确定-为什么实现类的接口泛型设置为List

比如:
file
解读:

BeanListHandler实现类的ResultSetHandler接口的泛型设置为List<T>,是因为它用于将ResultSet结果集中的多行数据转换成Java对象,并将这些对象存储在List集合中返回。

实现类设置自己的泛型,实现接口时定义实现接口的泛型类型参数

实现类需要返回List<T>,但是接口的handle抽象方法的返回类型是接口的泛型类型。
只需要在实现接口时把接口的泛型定义为List<T>,那么接口的handle抽象方法的返回类型就是List<T>

接口
/**
 * 模板方法模式,把要变化的放到子类中实现,把固定重复的放到父类中反复调用
 * 实现ResultSetHandler<List<T>>,这样handler返回类型为List
 * 同时handler负责接收数据
 * 创建一个抽象方法handleRow负责让子类重写并调用子类对应的单行处理器
 *
 * @param <T>
 */
public abstract class AbstractListHandler<T> implements ResultSetHandler<List<T>> {
    @Override
    public List<T> handler(ResultSet resultSet) throws SQLException {
        // 创建集合用于接收数据
        List<T> list = new ArrayList<>();
        // 遍历结果集
        while (resultSet.next()) {
            // 调用子类实现的单行查询的抽象方法,将数据传入集合中
            list.add(handleRow(resultSet));
        }
        return list;
    }

    /**
     * 单行查询的抽象方法提供给子类实现
     * @param resultSet
     * @return
     * @throws SQLException
     */
    public abstract T handleRow(ResultSet resultSet) throws SQLException;
}