Методы get Java и методы set

Существует ли лучший стандартный способ создать методов get и методы set в Java?

Это является довольно подробным для явного определения методов get и методов set для каждой переменной. Существует ли лучший стандартный подход аннотаций?

Spring имеет что-то вроде этого?

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

57
задан Verhogen 15 December 2009 в 13:04
поделиться

14 ответов

Это работа IDE по генерации повторяющегося подробного кода в качестве геттеров / сеттеров

0
ответ дан 24 November 2019 в 19:31
поделиться

Пробовали ли вы 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
2
ответ дан 24 November 2019 в 19:31
поделиться

Используйте вашу среду IDE, чтобы сгенерировать ее для вас, и постарайтесь минимизировать количество геттеров / сеттеров, которые у вас есть - вам, вероятно, понравится дополнительное преимущество неизменности.

Мне нравится синтаксис C # для свойств, я считаю его красивым, чистым и довольно чистым.

0
ответ дан 24 November 2019 в 19:31
поделиться

Ну, один вариант - не бойтесь публичных полей. Для простых классов, которые, как вы знаете, никогда не будут выполнять проверку или дополнительную работу при получении и установке, общедоступные поля требуют меньше шаблонов, синтаксически лучше и эффективнее.

0
ответ дан 24 November 2019 в 19:31
поделиться

Ага, тебе не повезло. Groovy генерирует их за вас, но не в стандартной java. Если вы используете Eclipse, вы можете довольно легко сгенерировать их , а также сгенерировать функции hashCode () и equals ().

1
ответ дан 24 November 2019 в 19:31
поделиться

Я не уверен, что вы считаете его «стандартным», но Project Lombok решает эту проблему. Они используют аннотации, чтобы заменить большую часть многословности Java.

Некоторые люди ищут альтернативные родственные языки Java, такие как Groovy или Scala. Боюсь, что пройдет несколько лет - если вообще - JSR найдет "стандартизированный" способ "исправить" это в собственно Java.

67
ответ дан 24 November 2019 в 19:31
поделиться

Большинство IDE предоставляют ярлык для генерации кода (например, Eclipse: щелкните правой кнопкой мыши -> Source -> Generate Getters & Setters ), хотя я понимаю, что это, вероятно, не ответ, который вы ищете.

Некоторые фреймворки IOC позволяют аннотировать свойства, чтобы их можно было использовать в контексте фреймворка, например Tapestry IOC и, как мне кажется, последней версии Spring (но это использование ограничено фреймворком)

3
ответ дан 24 November 2019 в 19:31
поделиться

Вот интересные статьи на эту тему: http://cafe.elharo.com/java/why-java-doesnt-need-properties-it-already-has-them/

Я думаю, что свойства - это сокращение, но это скорее небольшая функция, чем действительно важная функция

3
ответ дан 24 November 2019 в 19:31
поделиться

В Netbeans просто начните вводить get или set, где должен быть заменен получатель / установщик, и вызовите автозаполнение (Ctrl + Пробел), это даст вам возможность сгенерировать получатель или сеттер. Это также даст вам возможность создать конструктор.

2
ответ дан 24 November 2019 в 19:31
поделиться

Нет лучшего способа, который является частью языка - ничего похожего на ключевое слово "свойство".

Одна альтернатива, как упоминали другие люди, - использовать вашу среду IDE для их генерации . Другой вариант, если у вас есть много объектов, которым это нужно, - написать собственный инструмент генерации кода, который берет базовый класс и создает оболочку с геттерами и сеттерами.

Вы также можете просто открыть доступ к переменные как открытые члены. Однако в будущем это, вероятно, причинит вам боль, когда вы решите добавить логику проверки.

Однако одна последняя мысль: если ваши классы не используются просто для передачи данных, они, вероятно, не должны раскрывать свое внутреннее состояние. . ИМО, классы "поведения" с геттерами и сеттерами - это запах кода.

2
ответ дан 24 November 2019 в 19:31
поделиться

Итак, если я могу использовать WHERE для связывания таблиц, какова основная цель наличия внешнего ключа?

Поскольку предложение WHERE не ограничивается эквивалентными объединениями на внешних keys.

Скажем, если у вас есть таблица, в которой описаны диапазоны цен и скидки, вы используете это сложное условие для объединения таблиц:

SELECT  *
FROM    Goods
JOIN    PriceRange
ON      PriceRange.Price =
        (
        SELECT  MAX(Price)
        FROM    PriceRange
        WHERE   PriceRange.Price <= Goods.Price
        )

Вы не можете связать эти таблицы с помощью отношения внешнего ключа, но вы можете легко присоединиться к ним.

См. Эту запись в моем блоге для получения более подробной информации:

Однако привязка pk-to-pk все еще важна. FOREIGN KEY может гарантировать вам, что объект, который вы связываете, описывается вашей реляционной моделью.

С дизайном, поддерживаемым FOREIGN KEY ,

19
ответ дан 24 November 2019 в 19:31
поделиться

Я согласен, что геттер/установщики многословны. Project Lombok есть хороший ответ на этот вопрос, как предлагали другие. В противном случае, вы можете использовать возможности IDE для их генерации.

.
3
ответ дан 24 November 2019 в 19:31
поделиться

Если вы используете emacs, возможно, можно определить макрос emacs, который делает это за вас. Есть ли там гуру Emacs? :)

0
ответ дан 24 November 2019 в 19:31
поделиться

Я создал несколько аннотаций, которые не зависят от затмения.

См. 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 и может сломаться - я могу ошибаться насчет того, как это работает, но, основываясь на том, что я видел, они, должно быть, делают это)

Наслаждайтесь! -- Скотт

6
ответ дан 24 November 2019 в 19:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: