Java Getters and Setters
Есть ли лучший стандартный способ создания геттеров и сеттеров в Java?
Достаточно подробно указывать геттеры и сеттеры для каждой переменной. Есть ли более эффективный подход к аннотациям?
Есть ли у Spring что-то вроде этого?
Даже С# имеет свойства.
Ответы
Ответ 1
Я не уверен, если вы считаете это стандартным, но Проект Lombok рассматривает эту проблему. Они используют аннотации, чтобы заменить большую часть многословия Java.
Некоторые люди ищут альтернативные Java-родственные языки, такие как Groovy или Scala. Я боюсь, что это займет несколько лет - даже если JSR выяснит "стандартизованный" способ "исправить" это в Java.
Ответ 2
Eclipse имеет параметр контекстного меню, который будет автоматически генерировать их для вас, так как я уверен, что многие другие IDE делают.
Ответ 3
Я создал несколько аннотаций, которые не зависят от eclipse.
См. http://code.google.com/p/javadude/wiki/Annotations
Например:
package sample;
import com.javadude.annotation.Bean;
import com.javadude.annotation.Property;
import com.javadude.annotation.PropertyKind;
@Bean(properties={
@Property(name="name"),
@Property(name="phone", bound=true),
@Property(name="friend", type=Person.class, kind=PropertyKind.LIST)
})
public class Person extends PersonGen {
}
Мои аннотации генерируют суперкласс; Я думаю, что Lombok изменяет фактически скомпилированный класс (который официально не поддерживается Sun и может сломаться - я могу ошибаться в том, как он работает, но на основе того, что я видел, они должны это делать)
Наслаждайтесь!
- Скотт
Ответ 4
Большинство IDE предоставляют ярлык для генерации кода (например, Eclipse: правый клик → источник → генерировать получатели и сеттеры), хотя я понимаю, что это, вероятно, не тот ответ, который вы ищете.
Некоторые структуры IOC позволяют вам аннотировать свойства, чтобы их можно было использовать в контексте структуры, например. Tapestry IOC и последний Spring, я думаю (но это использование ограничено для использования каркасом)
Ответ 5
Вот интересные статьи по теме:
http://cafe.elharo.com/java/why-java-doesnt-need-properties-it-already-has-them/
Я думаю, что свойства - это ярлык, но это скорее небольшая функция, чем настоящая важная функция.
Ответ 6
Я согласен, что getter/seters являются подробными. Проект Ломбок
имеет хороший ответ для него, как это было предложено другими.
В противном случае вы можете использовать возможности IDE для их создания.
Ответ 7
С Netbeans просто начните вводить get или set, где должен быть заменен геттер/сеттер, и вызывать автоматическое завершение (Ctrl + Space), это даст вам возможность генерировать getter или setter. Он также даст вам возможность генерировать конструктор.
Ответ 8
Как альтернатива, вы пробовали Scala? Он компилируется в байт-код Java и имеет множество интересных ярлыков, которые могут облегчить вашу жизнь программисту на Java.
Свойства, например:
case class Person(var name:String,
var age:Int);
val p = Person("John", 4)
p.name
p.name = "Charlie"
p.name
И вывод:
defined class Person
p: Person = Person(John,4)
res7: String = John
res8: String = Charlie
Ответ 9
Существует также проект Spring Roo с аннотацией @RooJavaBean. Он также имеет @RooToString и @RooHashCodeEquals или что-то в этом роде. Он генерирует в фоновом режиме файл AspectJ с надлежащими методами.
Ответ 10
Да, тебе не повезло. Groovy генерирует их для вас, но нет кубиков в стандартной java. Если вы используете Eclipse, вы можете сгенерировать их довольно легко, а также генерировать hashCode() и equals().
Ответ 11
Нет лучшего способа, чтобы часть языка - ничего похожего на ключевое слово "свойство".
Одна из альтернатив, как говорили другие люди, - использовать вашу среду IDE для их создания. Другое, если у вас есть много объектов, которые в этом нуждаются, это написать собственный инструмент генерации кода, который принимает базовый класс и создает оболочку с геттерами и сеттерами.
Вы также можете просто выставить переменные как общедоступные. Однако, по дороге это, вероятно, вернется, чтобы причинить вам боль, когда вы решите добавить логику проверки.
Однако, одна последняя мысль: если ваши классы не используются просто для передачи данных, они, вероятно, не должны раскрывать свое внутреннее состояние. ИМО, классы "поведения" с геттерами и сеттерами являются запахами кода.
Ответ 12
Что работа IDE для генерации повторяющегося подробного кода как getters/seters
Ответ 13
Используйте свою среду IDE, чтобы сгенерировать ее для вас, и попытайтесь свести к минимуму количество получателей/сеттеров, которые у вас есть - вы, вероятно, будете пользоваться дополнительным преимуществом неизменности.
Мне нравится синтаксис С# для свойств, я думаю, что он довольно и чистый, и довольно чистый.
Ответ 14
Ну, один из вариантов - не бояться публичных полей. Для простых классов, которые, как вы знаете, никогда не будут выполнять валидацию или дополнительную работу под капотом при получении и настройке, публичные поля требуют меньше шаблонов, синтаксически лучше и эффективнее.
Ответ 15
Если вы используете emacs, возможно определить макрос emacs, который сделает это за вас. Какие-нибудь гуру emacs?:)