Подтвердить что ты не робот

Ярлык для вызова всех методов setter для объекта в Eclipse?

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

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

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

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

4b9b3361

Ответ 1

Из моего прошлого опыта я не могу найти, что у 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()));
        }
}

Ответ 3

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

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

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


Другой вариант (хотя он, вероятно, не будет продуктивным...) заключается в том, чтобы запросить пересмотр громоздкого API; например для поддержки шаблона "строитель".

Ответ 4

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

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

Ответ 5

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

(a) Выберите свой класс (и щелкните правой кнопкой мыши) (b) Выберите источник (Shift + Alt + S) (c) Выберите Getters and Setters Полученное всплывающее окно (Generate getters and setters) позволяет вам выбрать ВСЕ или Отдельные поля.

Надеюсь, что это поможет (если все еще актуально).

Ответ 6

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

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

Ctrl + F → eclipse найти/найти и заменить (волшебный инструмент 02)

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

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

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

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

  • выберите все и установите набор слов (инструмент 01)  Пример: setUser

  • Совместите все поля в строке. Таким образом, вы можете использовать селектор блоков прямо

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

теперь у вас есть все готовые сеттеры

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

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

приветствия!

Ответ 8

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

Код здесь