Как я могу удалить универсальный тип из класса с помощью рефакторинга - PullRequest
7 голосов
/ 22 июня 2011

У меня есть этот класс:

public class TimeIntCo<T> extends TimeValueCo<Integer>
{

}

Я решил, что тип T больше не нужен, и он не используется в классе (я знаю, что это всегда Integer).
Однако,У меня есть много ссылок на класс, который выглядит как TimeIntCo<Integer>.
Есть ли способ использовать рефакторинг Eclipse для удаления типа T без каких-либо ошибок в ссылках?
Я имею в виду сделать это в одномшаг и не найти и заменить.

РЕДАКТИРОВАТЬ: , чтобы быть более понятным - если я просто удалить T из класса, у меня есть около 10000 ошибок, я не хочу делать это вручную, иЯ предпочитаю не использовать поиск и замену, потому что считаю рефактор более безопасным.

Ответы [ 6 ]

4 голосов
/ 22 июня 2011

Просто выполните текстовый поиск / замену TimeIntCo<Integer> -> TimeIntCo на всех классах Java.

3 голосов
/ 22 июня 2011

Введите суперкласс

public class TimeIntCoSup extends TimeValueCo<Integer> {

}

и измените TimeIntCo, чтобы расширить его.

public class TimeIntCo<T> extends TimeIntCoSup {

}

Затем используйте Eclipse's Refactor -> Использовать супертип, где это возможно

1 голос
/ 22 июня 2011

Поскольку рефакторинг встроенной среды IDE не может справиться с тем, что вы хотите, то, если вам надоест ручное определение / замена, это будет работать

while read -r file; do 
    sed -i 's/TimeIntCo<[[:alpha:]]*>/TimeIntCo/g' "$file"; 
done < <(find /path/to/src/ -type f -iname "*.java")` 

Это будет работать, так как в нем будут удаленыTimeIntCo<T> или TimeIntCo<Integer>, но это не исправит ваши декларации T someMethod(T t) внутри TimeIntCo

Просто предлагая альтернативу, вы также можете не использовать Unix-подобную среду или Bash, поэтому просто игнорируйтеэто.

1 голос
/ 22 июня 2011

Я сомневаюсь, что для этого есть рефакторинг. Просто удалите <T>, сохраните файл и пройдите и исправьте все возможные ошибки компиляции. (Если параметр типа T не используется, не должно быть никаких ошибок компиляции для исправления ...)


@ ohadshai комментарии:

тогда у меня около 10000 ошибок в затмении ...

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

Знаете ли вы какую-нибудь другую IDE, которая делает это? IDEA?

Нет, не знаю. Факторы обычно используются для простых преобразований, которые сохраняют значение исходного исходного кода. Это преобразование вряд ли сделает это.

0 голосов
/ 23 ноября 2015

Используйте поиск и замену по регулярному выражению в Eclipse (Поиск | Файл): поиск: SomeClass\<.*\> и заменить на: SomeClass. При необходимости повторите для подклассов.

0 голосов
/ 22 июня 2011

, если T не дает вам никакой выгоды, просто удалите его из объявления класса:

public class TimeIntCo extends TimeValueCo<Integer>
{

}

Может безопасно оставаться в родительском классе TimeValueCo.

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