You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java如何编写可同时接收Integer/Double二维ArrayList的自定义toString方法?

解决方案

你可以通过泛型方法实现需求,无需编写重复代码或额外转换,核心思路是限定泛型参数为Number的子类,这样就能同时兼容ArrayList<ArrayList<Integer>>和ArrayList<ArrayList<Double>>类型。

修改后的核心方法如下:

static <T extends Number> String matrixToString(ArrayList<ArrayList<T>> matrix) {
    ArrayList<String> s = new ArrayList<>();
    for (int j = 0; j < matrix.get(0).size(); j++) {    
        ArrayList<T> n = new ArrayList<>();
        for (int i = 0; i < matrix.size(); i++) {
            n.add(matrix.get(i).get(j));
        }
        s.add(myArrayListToString(n, ParseType.EMPTY_EMPTY_SPACE));
    }
    return myArrayListToString(s, ParseType.EMPTY_EMPTY_NEWLINE);
}

同时需要将myArrayListToString也修改为泛型方法,以支持任意Number子类的列表:

static <T extends Number> String myArrayListToString(ArrayList<T> list, ParseType type) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < list.size(); i++) {
        if (i > 0) {
            switch (type) {
                case EMPTY_EMPTY_SPACE:
                    sb.append(" ");
                    break;
                case EMPTY_EMPTY_NEWLINE:
                    sb.append("\n");
                    break;
            }
        }
        sb.append(list.get(i).toString());
    }
    return sb.toString();
}

原理说明

  • 泛型参数<T extends Number>限定方法仅接受Number及其子类类型,刚好匹配Integer和Double;
  • 调用方法时Java会自动推断具体的T类型(传入Integer矩阵时T为Integer,传入Double矩阵时T为Double);
  • 内部创建的ArrayList<T>可正常添加对应类型元素,避免了通配符? extends Number无法添加元素的问题。

内容的提问来源于stack exchange,提问作者Lapid Palid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 16:53:17