Обобщения в устаревшем коде - PullRequest
9 голосов
/ 20 октября 2008

У нас довольно большой объем кода, который только что перешел на Java 5. Мы использовали дженерики в этих компонентах, предназначенных для выпуска в версии Java 5, но оставшийся код, конечно, полный сырых видов. Я установил компилятор для генерации ошибки для необработанных типов и начал очищать их вручную, но при нынешних темпах это займет очень много времени (около 1003 *2500* 1004 * ошибок). И это благодаря полезному быстрому исправлению Infer Generic Type в Eclipse, которое всегда избавляет от ошибок, но часто генерирует код, требующий дальнейшей работы.

Есть ли лучший способ справиться с этим? Есть ли автоматизированные инструменты лучше, чем Eclipse? Любой способ применить рефакторинг к всем событиям вместо того, чтобы делать их один за другим? Или вы просто игнорируете предупреждения?

Ответы [ 5 ]

9 голосов
/ 20 октября 2008

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

Обновление: Отличный комментарий от Люк , который, как я думал, должен стать более заметным: "Обобщения - это способ отловить ошибки времени выполнения во время компиляции. Если в этом унаследованном коде нет ошибок, которые, по вашему мнению, связаны с преобразованием, я бы оставил его в покое (если он не сломан, не исправляйте его ) "

3 голосов
/ 20 октября 2008

Столкнувшись с аналогичной проблемой, мы решили обновить дженерики стиля Java 5 только в том коде, который был отредактирован по другой причине. Так что если у вас есть ошибка, которую нужно исправить в DoItFast.java, обновите DoItFast.java для использования обобщений стиля Java 5. Области кода, которые редактируются и изменяются регулярно, будут обновляться быстро. После нескольких недель или месяцев этого поведения вы можете переоценить состояние вашей кодовой базы.

Если это не поможет вам выполнить работу достаточно быстро, иногда я буду использовать медленное время после обеда, чтобы просто бездумно очистить несколько уроков и ускорить процесс.

3 голосов
/ 20 октября 2008

Насколько я знаю, вы делаете это максимально эффективно. Это очевидно, не идеально, но вы закончите в конце концов.

Однако я рекомендую вам делать это поэтапно; есть вероятные части код, который выиграет от этого больше, чем другие, сосредоточиться на них. Пытаясь сделать все это за один раз рискует привести к появлению новых ошибок в вашем коде. Мы есть одно такое место, где у нас есть коллекция, которая содержит контекстно-зависимую данные и дженерики на самом деле не могут работать на них.

По сути, делайте то, что вы делаете, но делайте это поэтапно, как часть другой работы, вместо того, чтобы пытаться все исправить одним броском.

1 голос
/ 20 октября 2008

Я понимаю, что с помощью IDEA вы можете выбрать все свои классы, открыть контекстное меню и выбрать Refactor | Generify. Работа выполнена. Работа с обобщенным кодом (IMO), безусловно, более приятна.

1 голос
/ 20 октября 2008

Не думаю, что нужно обновлять весь старый код. Может быть, если бы вы могли как-то определить, какие части старого кода используются часто, и обновить только те, которые используют универсальные типы? Или, может быть, вы могли бы волноваться, только когда необработанный тип возвращается из публичной функции? Многие из этих случаев, вероятно, являются просто частными / локальными переменными, которые уже написаны без универсальных типов и, по-видимому, работают просто отлично, поэтому, вероятно, не стоит их переписывать.

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