У меня есть класс примерно с 40 переменными-членами. Теперь я хочу создать для них геттеры и сеттеры (им нужно запускать своего рода PropertyChangeEvent, а геттеры тоже не являются стандартными; но код практически одинаков для каждой переменной)
Вместо простого создания 80 функций и (вроде) все скопировать-вставить, я спрашиваю, можно ли это сделать с помощью (stati c) метапрограммирования (или чего-то другого, о чем я не знаю).
Я много делал с ruby раньше, где я бы просто написал sthg, например:
instance_variables.each do |var|
define_method "get_#{var}" do
return var if var.cached?
return var = super
end
# ...
end
Я знаю, что Java и Kotlin совершенно разные, поскольку они скомпилированы и статически типизированы , но поскольку это действительно полезно, и подобные вещи возможны в C (препроцессор), C ++ и даже VHDL (для генерации), я не могу поверить, что это невозможно легко.
I ' Я читал, что аннотации - это точка, с которой нужно начинать в java, но я также читал, что с их помощью можно (обычно) не изменять существующие классы.
Я читал о Lombok, где ты может аннотировать поля для создания для них обычных Getters & Setters, функций hashCode и equals и многих других вещей, но разработчики отмечают, что это много хакерских действий с частными API-интерфейсами компилятора, которые могут сломаться в любой момент. Это не совсем то, что я хочу в первую очередь (поскольку моя IDE достаточно умна, чтобы просто создавать их, не требуя таких уловок).
Шаблонный код неприятен и размывает код, но копировать вставку реального кода - это что-то, что я ненавижу, поэтому вопрос.
Я должен признать, что я не знаю, как это выглядит для Kotlin, но слышал, что Extensions должны быть там точкой входа. Я тоже открыт для этого, если это будет проще (или, по крайней мере, возможно).