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

Java Getters and Setters

Есть ли лучший стандартный способ создания геттеров и сеттеров в Java?

Достаточно подробно указывать геттеры и сеттеры для каждой переменной. Есть ли более эффективный подход к аннотациям?

Есть ли у Spring что-то вроде этого?

Даже С# имеет свойства.

4b9b3361

Ответ 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, я думаю (но это использование ограничено для использования каркасом)

Ответ 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?:)