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




Я бы посоветовал игнорировать предупреждения. В противном случае вы потратите много времени на обновление устаревшего кода, не внося никаких улучшений в его функциональность.
Обновлять: Отличный комментарий от Люк, который, как я думал, должен стать более заметным: «Обобщения - это способ выявлять ошибки времени выполнения во время компиляции. Если в этом устаревшем коде нет ошибок, которые, по вашему мнению, связаны с приведением типов, я бы оставил его в покое (если он не сломан, не исправляйте его)»
Обобщения - это способ выявлять ошибки времени выполнения во время компиляции. Если в этом устаревшем коде нет ошибок, которые, по вашему мнению, связаны с кастингом, я бы оставил его в покое (если он не сломан, не исправляйте его)
Однако, если компилятор генерирует так много предупреждений, что вы не видите настоящих предупреждений, возможно, у вас есть проблема. Я не уверен, есть ли в Java эта функция или нет, но в .Net вы можете точно настроить, какие типы предупреждений вы хотите видеть.
Вы можете отключить предупреждения, связанные с генериками, используя "-Xlint: -unchecked". Имейте в виду, что это отключает предупреждения для ВСЕХ файлов, включая ваш новый код.
Как продолжение Kibbee, если вы хотите скрыть существующие предупреждения для определенных классов, добавьте в класс @SurpressWarnings («не отмечен»).
Не думаю, что нужно обновлять весь старый код. Может быть, если бы вы могли каким-то образом определить, какие части старого кода используются часто, и обновить их только для использования общих типов? Или, может быть, вы могли беспокоиться только о том, что необработанный тип возвращается из общедоступной функции? Многие из этих случаев, вероятно, являются просто частными / локальными переменными, которые уже написаны без общих типов и, по-видимому, работают нормально, поэтому, вероятно, не стоит переписывать их.
Насколько я знаю, вы делаете это максимально эффективно. Это очевидно, не идеально, но в конце концов вы закончите.
Однако я рекомендую делать это поэтапно; есть вероятные части код, который выиграет от этого больше, чем другие, сосредоточьтесь на них. Пытаясь сделать все за один раз, вы рискуете внести новые ошибки в ваш код. Мы есть одно такое место, где у нас есть коллекция, содержащая контекстно-зависимую data, а дженерики на самом деле не могут работать.
В основном делайте то, что делаете, но делайте это поэтапно в рамках другой работы, вместо того, чтобы пытаться исправить все одним броском.
Столкнувшись с аналогичной проблемой, мы решили перейти на дженерики в стиле Java 5 только в коде, который был отредактирован по другой причине. Поэтому, если у вас есть ошибка, которую нужно исправить в DoItFast.java, обновите DoItFast.java, чтобы использовать дженерики в стиле Java 5. Области кода, которые регулярно редактируются и изменяются, будут быстро обновляться. Через несколько недель или месяцев такого поведения вы можете повторно оценить состояние своей кодовой базы.
Если это не помогает вам сделать работу достаточно быстро, иногда я использую медленное время после обеда, чтобы бездумно убирать несколько классов и ускорять процесс.
Я понимаю, что с IDEA вы можете выбрать все свои классы, открыть контекстное меню и выбрать Refactor | Generify. Дело сделано. Безусловно, работать с обобщенным кодом (IMO) намного приятнее.
Я согласен с Дэвидом. Я не совсем понимаю, Почему вы обновляете весь код, чтобы использовать дженерики.