Существует ли лучший стандартный способ создать методов get и методы set в Java?
Это является довольно подробным для явного определения методов get и методов set для каждой переменной. Существует ли лучший стандартный подход аннотаций?
Spring имеет что-то вроде этого?
Даже C# имеет свойства.
Это работа IDE по генерации повторяющегося подробного кода в качестве геттеров / сеттеров
Пробовали ли вы 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
Используйте вашу среду IDE, чтобы сгенерировать ее для вас, и постарайтесь минимизировать количество геттеров / сеттеров, которые у вас есть - вам, вероятно, понравится дополнительное преимущество неизменности.
Мне нравится синтаксис C # для свойств, я считаю его красивым, чистым и довольно чистым.
Ну, один вариант - не бойтесь публичных полей. Для простых классов, которые, как вы знаете, никогда не будут выполнять проверку или дополнительную работу при получении и установке, общедоступные поля требуют меньше шаблонов, синтаксически лучше и эффективнее.
Ага, тебе не повезло. Groovy генерирует их за вас, но не в стандартной java. Если вы используете Eclipse, вы можете довольно легко сгенерировать их , а также сгенерировать функции hashCode () и equals ().
Я не уверен, что вы считаете его «стандартным», но Project Lombok решает эту проблему. Они используют аннотации, чтобы заменить большую часть многословности Java.
Некоторые люди ищут альтернативные родственные языки Java, такие как Groovy или Scala. Боюсь, что пройдет несколько лет - если вообще - JSR найдет "стандартизированный" способ "исправить" это в собственно Java.
Большинство IDE предоставляют ярлык для генерации кода (например, Eclipse: щелкните правой кнопкой мыши -> Source -> Generate Getters & Setters ), хотя я понимаю, что это, вероятно, не ответ, который вы ищете.
Некоторые фреймворки IOC позволяют аннотировать свойства, чтобы их можно было использовать в контексте фреймворка, например Tapestry IOC и, как мне кажется, последней версии Spring (но это использование ограничено фреймворком)
Вот интересные статьи на эту тему: http://cafe.elharo.com/java/why-java-doesnt-need-properties-it-already-has-them/
Я думаю, что свойства - это сокращение, но это скорее небольшая функция, чем действительно важная функция
В Netbeans просто начните вводить get или set, где должен быть заменен получатель / установщик, и вызовите автозаполнение (Ctrl + Пробел), это даст вам возможность сгенерировать получатель или сеттер. Это также даст вам возможность создать конструктор.
Нет лучшего способа, который является частью языка - ничего похожего на ключевое слово "свойство".
Одна альтернатива, как упоминали другие люди, - использовать вашу среду IDE для их генерации . Другой вариант, если у вас есть много объектов, которым это нужно, - написать собственный инструмент генерации кода, который берет базовый класс и создает оболочку с геттерами и сеттерами.
Вы также можете просто открыть доступ к переменные как открытые члены. Однако в будущем это, вероятно, причинит вам боль, когда вы решите добавить логику проверки.
Однако одна последняя мысль: если ваши классы не используются просто для передачи данных, они, вероятно, не должны раскрывать свое внутреннее состояние. . ИМО, классы "поведения" с геттерами и сеттерами - это запах кода.
Итак, если я могу использовать 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
,
Я согласен, что геттер/установщики многословны. Project Lombok есть хороший ответ на этот вопрос, как предлагали другие. В противном случае, вы можете использовать возможности IDE для их генерации.
.Если вы используете emacs, возможно, можно определить макрос emacs, который делает это за вас. Есть ли там гуру Emacs? :)
Я создал несколько аннотаций, которые не зависят от затмения.
См. 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 и может сломаться - я могу ошибаться насчет того, как это работает, но, основываясь на том, что я видел, они, должно быть, делают это)
Наслаждайтесь! -- Скотт