java - 通过 Java/Kotlin 中的静态元编程创建函数
问题描述
我有一个包含大约 40 个成员变量的类。现在我想为它们创建 getter 和 setter(它们需要触发一种 PropertyChangeEvent 并且 getter 也不是默认的;但每个变量的代码实际上是相同的)
我不只是创建 80 个函数和(某种)复制粘贴所有内容,而是询问是否可以通过(静态)元编程(或我不知道的其他东西)来做到这一点。
我在 ruby 上做了很多工作,之前我大概只是写了一些类似的东西:
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(用于生成)中都可能出现类似的事情,我不敢相信这不容易。
我读过 Annotations 是从 java 开始的点,但我也读到,一个人(通常)不能用它们改变现有的类。
我读过Lombok,您可以在其中注释字段以为它们生成普通的 Getter 和 Setter、hashCode 和 equals 函数以及许多其他东西,但开发人员指出,这是很多私有编译器 API 的黑客行为,可以随时休息。
这并不是我真正想要的(因为我的 IDE 足够智能,可以创建它们,而不需要这些技巧)。
样板代码很讨厌并且给代码浇水,但是复制粘贴真实代码是我讨厌的东西,因此是个问题。
我不得不承认,我不知道 Kotlin 的情况如何,但听说 Extensions 应该是那里的入口点。如果这更容易(或至少可能),我也对此持开放态度。
解决方案
推荐阅读
- python - 基于两列Python对List的数字字符串值进行排序
- c++ - 为什么我的代码没有读入我的输入值?
- javascript - 如何在 contentEditable div 中获取插入符号 x 和 y 位置
- scala - 如何将微风densevector转换为seq或array
- r - ggplot2 - geom_line - 绘制没有缺失值的时间序列
- python - 在 Python 中有没有办法找到具有特定属性的对象?
- elasticsearch - 在 Elasticsearch 中按字段的部分分组
- python - PySDL2 位图字体
- selenium - 使用 Selenium 创建与 Chrome 交互的宏
- python - 我的代码将运行,然后当它到达某个函数时,我有 TypeError:'NoneType' 类型的对象没有 len()