Java:是否有一些工具可以将X [] []重构为List <list <x>&gt;?</list <x>

时间:2010-01-29 22:32:00

标签: 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(两个最新版本)中自动化这种重构。

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

修改
该项目非常以算法为导向。不会触及算法的内部实现。但必须改变对外部世界的接触。大多数类都以这种方式构成,它们只保存一些结果数组或数组数组。

2 个答案:

答案 0 :(得分:3)

  

必须改变对外界的曝光

在这种情况下,我不会在任何地方改变它,而是:

  • 仅更改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
    }
    

答案 1 :(得分:2)

  1. 我很难同意你要做的事情可以被称为'重构'。

  2. 数组有一些列表没有的可能性(当然反之亦然)。

  3. 例如,如果创建10个整数元素的新数组,则其大小为10,并且它具有10个零值。

    你也可以用一些棘手的方式使用它的索引。例如,考虑基数排序算法。要使用列表实现它,您应首先在此列表中添加大量零,然后性能会下降两倍。

    我告诉这个解释这个想法,即实现强大的工具几乎不可能做你想做的事。