Ярлык для вызова всех методов установки на объект в Eclipse? - PullRequest
19 голосов
/ 03 августа 2011

Я хочу создать объект класса в и затем установить все свойства в нем, используя методы установки.Существует более 150 методов установки, и я хочу напечатать каждый из них или даже ввести имя экземпляра объекта Object instance, ввести точку ., а затем нажать пробел для Eclipse, чтобы дать мне предложения, а затем перейти и выбратьметод установки.Я не хочу делать это 150 раз.

Таким образом, я искал какой-то ярлык в Eclipse, который позволил бы вам вызывать все методы установки в методе.Так как вы вводите имя экземпляра, и Eclipse вызывает все методы установки, например

  • instanceName.setterOne ("valOne");
  • instanceName.setterTwo ("valOne");
  • instanceName.setterThree ("valOne");

Я не могу создать другой конструктор в классе, мне не разрешено это делать

Ответы [ 8 ]

33 голосов
/ 03 августа 2011

Исходя из моего прошлого опыта, я не могу найти, что у eclipse есть такая функция. Максимум, что я могу сделать, - это открыть Type Hierarchy Просмотр (нажав F4 при просмотре этого класса), а затем отсортировать имя метода этого класса и скопируйте все установщики для дальнейшего редактирования.

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

for (Method m : Foo.class.getMethods()) {
        if (m.getName().startsWith("set")) {
            System.out.println(String.format("instanceName.%s(\"valOne\");", m.getName()));
        }
}
8 голосов
/ 11 октября 2011

См. Этот вопрос: Создать все вызовы setXXX для POJO в Eclipse?

У него отличный и простой способ делать то, что вы хотите.

Ох, и попытайся игнорировать ненавистников!

2 голосов
/ 03 августа 2011

Я не хочу делать это 150 раз

Я не знаю ни одной функции Eclipse, которая поможет вам здесь.

Вы можете использовать что-то неуклюжее, например макросы клавиатуры emacs или сценарии perl, для массажа исходного кода вне Eclipse .


Ваш другой вариант (хотя, вероятно, он не будет продуктивным ...) - попросить пересмотреть громоздкий API; например поддерживать шаблон «строитель».

1 голос
/ 28 июня 2017

Если вы используете IntelliJ, проверьте этот плагин:

https://plugins.jetbrains.com/plugin/9360-generateallsetter

1 голос
/ 29 марта 2017

Вот несколько советов, которые я использовал -

Ctrl + Shift + A -> выбор блока затмения (это волшебный инструмент 01)

Ctrl + F -> найти / найти и заменить затмение (магический инструмент 02)

Ctrl + Shift + X -> в верхний регистр (инструмент 03)

Вот как я это сделал

  1. выбор блока -> выбрать все имена полей (инструмент01) Пример: пользователь

  2. выберите все первые буквы и введите первую букву в верхнем регистре (инструмент 01/03)
    Пример: пользователь

  3. выберите все и поместите слово set (инструмент 01) Пример: setUser

  4. Хорошо выровняйте все поля по линии.Таким образом, вы можете использовать прямой выбор блока

  5. выбрать все и установить "();"Пример: setUser ();

теперь у вас есть все установщики готовы

Когда вы хотите вставить значение в скобках, вы можете использовать магический инструмент 02. Найти и заменить(подумайте немного, и вы увидите вариант)

Наконец, сэкономьте свое время скуки из настроек геттеров / сеттеров.

ура!

1 голос
/ 31 августа 2016

У меня есть Eclipse 4.6.0, в котором есть возможность автоматически генерировать геттеры и сеттеры (не уверены в более ранних версиях Eclipse).

(a) Выберите свой класс (и щелкните правой кнопкой мыши) (b) Выбор источника (Shift + Alt + S) (c) Выбор получателей и установщиков Получившееся всплывающее окно («Генераторы получателей и установщиков») позволяет выбрать ВСЕ или отдельные поля.значение).

1 голос
/ 03 августа 2011

Я бы серьезно подумал о редизайне вашего класса, учитывая, что вы достигли этой ситуации.Не зная много об этом классе или ваших целях, я бы рискнул, что почти нет причин иметь 150 отдельных полей, особенно если они одного типа.Подумайте об этом - если вы уже находитесь в этом затруднительном положении, насколько легко будет поддерживать этот код в будущем?

Если все поля имеют одинаковый тип, рассмотрите возможность использования массива, List или Map (свойство-> значение).Если это много разных типов, подумайте, как можно разбить их на классы компонентов, которыми можно было бы легче управлять.

0 голосов
/ 09 декабря 2016

Я создал свое более общее решение этой проблемы на основе @ Ken Chan anwser, который устанавливает не только базовые типы. Это далеко от совершенства, но для некоторых это может быть отправной точкой.

Код здесь

...