Java:是否有一些工具能够将 X[][] 重构为 List<List<X>>?

标签 java arrays collections refactoring automation

我必须重构一个不小的现有项目。它包含大量数组声明和访问:
(X 不是通用类型,它只是一个占位符)
声明:X[]X[][] ,
访问:someArray[i]someArray[i][j] .

我必须重写所有内容才能使用通用列表:
声明:List<X>List<List<X>> ,
访问:someList.get(i)someList.get(i).get(j) .

我找不到自动化这种重构的可能性,无论是在 Eclipse 中还是在 Netbeans(两个最新版本)中。

是否有一些工具可用于进行此类重构?

编辑:
该项目非常面向算法。不会触及算法的内部实现。但是必须改变对外部世界的暴露。大多数类都是以这样的方式创建的,它们只包含一些结果数组或数组的数组。

最佳答案

exposure to the external world must be changed

在那种情况下,我建议不要在所有地方更改它,而是:

  • 仅更改public 方法的返回类型
  • 编写一个实用方法,如下所示:

    public static List<List<X>> asList(X[][] x) {
        List<X[]> list = Arrays.asList(x);
        List<List<X>> newList = new ArrayList<List<X>>(list.size());
        for (X[] xArray : list) {
            newList.add(Arrays.asList(xArray));
        }
        return list;
    }
    
  • 使用该方法更改每个 public 方法的唯一结果。即

    public List<List<X>> someAlgorithm(...) {
        // algorithm code
        X[][] result = ...;
        return Utils.asList(result); // add only this line
    }
    

关于Java:是否有一些工具能够将 X[][] 重构为 List<List<X>>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2165658/

相关文章:

java - Gradle Kotlin DSL - 当在 Parent 中定义 java.sourceCompatibility 时构建脚本失败,但在添加到子模块时构建成功

java - 如何运行 Docker 容器但不复制密码文件来组装镜像,还有其他选项吗?

java - 为什么 MediaType.TEXT_PLAIN 仅在我将 jersey-core-1.16.jar 添加到类路径时才起作用

java - 在二维数组中切换数组大小需要不同的内存量

JavaScript 何时使用数组对象与对象数组?

java - 使用可比较和比较器接口(interface)

java - 初始化一个 ArrayList

java - 学习如何设计用户访问控制的资源?

java - 将映射与 char 数组作为值进行比较 - Java

java - 比较填充有不同种类对象的两个集合