java 泛型类的定义和封装实例

本文介绍了一个用于生成TreeTable数据的Java泛型类实现。通过使用泛型和递归技术,该类能够灵活地处理不同类型的实体对象,并构建出树形结构的数据列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了让一个java类 在不同的类型都能在程序中调用,我们常常会将此类定义为泛型类,重要特点是:类的作用是通用的,仅此我们需要传入的类型不一样。

一个具体的实例是,当我们采用treeTable 显示页面的数据时,后台需要进行数据的重新整合,此时针对好多类都会进行创建一个产生treeTable 数据的类。那么我们这时最好的案方法就是封装一个通用的类,进行调用即可,传入你要整合数据的类型和整合的数据即可。

代码如下:

public class TreeTableUtils<T extends DataEntity> {
    protected T info;


    public T getInfo() {
        return info;
    }


    public void setInfo(T info) {
        this.info = info;
    }


    private List<T> resultNodes = new ArrayList<T>();//树形结构排序之后list内容
    private List<T> nodes; //传入list参数


    public TreeTableUtils(List<T> nodes, T info) {//通过构造函数初始化
        this.nodes = nodes;
        this.info = info;
    }


    /**
     * 构建树形结构list
     *
     * @return 返回树形结构List列表
     */
    public List<T> buildTree() {
        for (T node : nodes) {
            if (node.getParentId() == null || "".equals(node.getParentId())) {//通过循环一级节点 就可以通过递归获取二级以下节点
                resultNodes.add(node);//添加一级节点
                build(node);//递归获取二级、三级、。。。节点
            }
        }
        return resultNodes;
    }


    /**
     * 递归循环子节点
     *
     * @param node 当前节点
     */
    private void build(T node) {
        List<T> children = getChildren(node);
        if (!children.isEmpty()) {//如果存在子节点
            for (T child : children) {//将子节点遍历加入返回值中
                resultNodes.add(child);
                build(child);
            }
        }
    }


    /**
     * @param node
     * @return 返回
     */
    private List<T> getChildren(T node) {
        List<T> children = new ArrayList<T>();
        String id = node.getId();
        for (T child : nodes) {
            if (id.equals(child.getParentId())) {//如果id等于父id
                children.add(child);//将该节点加入循环列表中
            }
        }
        return children;
    }
}

其中涉及的知识点:递归和泛型



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纯洁的明依

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值