Ярлык для вызова всех методов setter для объекта в Eclipse?
Я хочу создать объект класса в, а затем установить все свойства в нем с помощью методов setter. Существует более 150 методов настройки, и я хочу набрать каждый из них или даже набрать имя экземпляра объекта Object instance
в точке .
, а затем нажать пробел для Eclipse, чтобы дать мне предложения, а затем перейти и выбрать метод сеттера. Я не хочу делать это 150 раз.
Таким образом, я искал какой-то ярлык в Eclipse, который позволяет вам вызывать все настройки для метода. Так как вы вводите имя экземпляра, и Eclipse вызывает все методы настройки, например.
- instanceName.setterOne( "Valone" );
- instanceName.setterTwo( "Valone" );
- instanceName.setterThree( "Valone" );
Я не могу создать еще один конструктор в классе, мне не разрешено делать это
Ответы
Ответ 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()));
}
}
Ответ 2
Смотрите этот вопрос: Сгенерировать все вызовы setXXX POJO в Eclipse?
У этого есть большой и простой способ делать то, что Вы хотите сделать.
Ой и старайся игнорировать ненавистников!
Ответ 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. Найти и заменить (подумайте немного, и вы увидите вариант)
Наконец, сэкономьте время скуки в настройках геттеров/сеттеров.
приветствия!
Ответ 7
Если вы используете IntelliJ, ознакомьтесь с этим плагином:
https://plugins.jetbrains.com/plugin/9360-generateallsetter
Ответ 8
Я создал собственное более общее решение этой проблемы на основе @Ken Chan anwser, в котором заданы не только базовые типы. Это далеко не идеально, но для некоторых это может быть отправной точкой.
Код здесь