我必须重构现有项目,这不是那么小。它包含许多数组声明和访问:
(X 不一般类型,它只是一个占位符)。
声明:X[]
和X[][]
,
访问权限:someArray[i]
和someArray[i][j]
。
我必须重写所有内容才能使用通用列表:
声明:List<X>
和List<List<X>>
,
访问权限:someList.get(i)
和someList.get(i).get(j)
。
我无法在Eclipse和Netbeans(两个最新版本)中自动化这种重构。
是否有一些工具可用于进行此类重构?
修改
该项目非常以算法为导向。不会触及算法的内部实现。但必须改变对外部世界的接触。大多数类都以这种方式构成,它们只保存一些结果数组或数组数组。
答案 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)
我很难同意你要做的事情可以被称为'重构'。
数组有一些列表没有的可能性(当然反之亦然)。
例如,如果创建10个整数元素的新数组,则其大小为10,并且它具有10个零值。
你也可以用一些棘手的方式使用它的索引。例如,考虑基数排序算法。要使用列表实现它,您应首先在此列表中添加大量零,然后性能会下降两倍。
我告诉这个解释这个想法,即实现强大的工具几乎不可能做你想做的事。