Java: Существуют ли какие-либо инструменты, которые могут реорганизовать X [] [] в List <List <X>>? - PullRequest
3 голосов
/ 30 января 2010

Мне нужно провести рефакторинг существующего проекта, который не так уж и мал. Он содержит много объявлений и обращений к массивам:
(X - , а не универсальный тип, это просто заполнитель) .
декларации: X[] и X[][],
доступ: someArray[i] и someArray[i][j].

Я должен переписать все, чтобы использовать общие списки:
декларация: List<X> и List<List<X>>,
доступ: someList.get(i) и someList.get(i).get(j).

Я не нашел возможности автоматизировать такой рефакторинг ни в Eclipse, ни в Netbeans (обе новейшие версии).

Есть ли какие-нибудь инструменты для такого рефакторинга?

EDIT:
Проект очень ориентирован на алгоритм. Внутренняя реализация алгоритмов не будет затронута. Но воздействие внешнего мира должно быть изменено. Большинство классов создаются таким образом, что они содержат только некоторые массивы результатов или массивы массивов.

Ответы [ 2 ]

3 голосов
/ 30 января 2010

воздействие внешнего мира должно быть изменено

В этом случае я бы не стал менять его везде, но:

  • изменить только возвращаемые типы 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;
    }
    
  • используйте этот метод для изменения результата only каждого метода public. * 1020 Т.е. *

    public List<List<X>> someAlgorithm(...) {
        // algorithm code
        X[][] result = ...;
        return Utils.asList(result); // add only this line
    }
    
2 голосов
/ 30 января 2010
  1. Я с трудом могу согласиться с тем, что то, что вы собираетесь делать, можно назвать «рефакторингом».

  2. У массивов есть некоторые возможности, которых нет в списках (и, конечно, наоборот).

Например, если вы создаете новый массив из 10 целочисленных элементов, то его размер равен 10, и он имеет десять нулевых значений.

Вы также можете использовать его индекс каким-то хитрым способом. Например, подумайте об алгоритме сортировки по основанию. Чтобы реализовать его со списками, вы должны сначала добавить в этот список много нулей, и вы получите в два раза худшую производительность.

Я говорю это, чтобы объяснить идею о том, что практически невозможно реализовать надежный инструмент для выполнения того, что вы хотите сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...