Дженерики в устаревшем коде

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

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
11
0
700
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

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

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

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

matt b 20.10.2008 21:10

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

luke 20.10.2008 21:14

Однако, если компилятор генерирует так много предупреждений, что вы не видите настоящих предупреждений, возможно, у вас есть проблема. Я не уверен, есть ли в Java эта функция или нет, но в .Net вы можете точно настроить, какие типы предупреждений вы хотите видеть.

Kibbee 20.10.2008 22:42

Вы можете отключить предупреждения, связанные с генериками, используя "-Xlint: -unchecked". Имейте в виду, что это отключает предупреждения для ВСЕХ файлов, включая ваш новый код.

James Schek 22.10.2008 00:15

Как продолжение Kibbee, если вы хотите скрыть существующие предупреждения для определенных классов, добавьте в класс @SurpressWarnings («не отмечен»).

deterb 02.11.2008 02:09

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

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

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

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

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

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

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

Другие вопросы по теме