2012-01-20 1 views
1

Доброго день всем, я пишу код для списка пользовательского массива примитивных ИНТА с (чтобы избежать накладных расходов по боксу), список массива примитивных байт с, списком массива примитивных длинных с , список массивов примитива char s и список массивов примитива double s.Есть ли инструмент для ручной работы по копированию + вставка + замена исходного кода?

Код для этих 5 классов: очень. В принципе логика (почти) идентична. Однако, поскольку дженерики не могут быть использованы, невозможно определить общие общие функции, используемые для всех 5 классов (исправьте меня, если я ошибаюсь).

В результате я должен дублировать один и тот же код 5 раз, выполняя строковый поиск, заменяя каждый раз. Проблема возникает, когда мне приходится редактировать классы, потому что я должен делать то же самое редактирование x5 раз.

Теперь мне было интересно, что лучше всего поддерживать повторяющийся шаблонный код вот так?

Есть ли инструмент, который может выполнять ручную работу по копированию + вставка + замена?

(например, я мог бы определить функцию преобразования F() и сказать инструмент: для исходного кода класса mypackage.IntArrayList, применим преобразование F() на исходный код классов mypackage.ByteArrayList, mypackage.LongArrayList, mypackage.CharArrayList и mypackage.DoubleArrayList) ?

ответ

3

, чтобы избежать накладных расходов на литье

Я думаю, что вы имели в виду (не) бокс, а не литья;)

Теперь мне было интересно, как наилучшим образом поддерживать повторяющийся шаблонный код, подобный этим?

Теперь, я знаю, что этот ответ будет неодобрение некоторых, но ...

То, как Trove API делает это просто: заказ и автоматический инструмент генерации кода.

Trove - это сборник API forter, основанный на примитивах, которые работают со сборками Java по умолчанию при использовании с примитивами. Сравнивая находку TIntIntHashMap с (HashMap < Integer, Integer> * это даже не интересно. Это постыдно по умолчанию Java API в ...

И они столкнулись именно проблему вы имеете. И они разрешил его с помощью инструмента генерации кода.

На заметку о примечании У Trove уже есть TIntArrayList, поддерживаемый примитивами, которые могут или не могут уже выполнять то, что вы реализуете сейчас (если я правильно понял ваш вопрос).

+0

Да, бокс, это моя ошибка :) – Pacerier

+0

Да, это то, m look for, инструмент генерации/преобразования кода. Какой инструмент использовал Trove? – Pacerier

+0

@Pacerier: Я написал * «custom» * в своем ответе, потому что, насколько мне известно, Trove использовала свое собственное средство генерации кода/шаблонирования, но я не уверен: долгое время я не смотрел на источник. Но это все с открытым исходным кодом, поэтому просто загрузите Trove и убедитесь, что это то, что вы хотите (черт возьми, вы даже можете использовать пользовательскую, используемую Trove). – TacticalCoder

2

Как определено, задача кажется довольно сложной. Я сомневаюсь, что вы найдете какой-нибудь существующий инструмент, чтобы сделать что-то подобное.

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

1

Судя по тегу, похоже, что вы используете Eclipse. Вы можете выполнить глобальный поиск и заменить, хотя это не очевидно. Перейдите в меню «Поиск», выполните поиск как обычно, а затем, когда увидите панель результатов поиска, щелкните правой кнопкой мыши и нажмите «заменить все»

Смежные вопросы