在Java/Kotlin中通过静态元编程创建函数
我有一个大约有40个成员变量的类。现在我想为它们创建getter和setter(它们需要触发一种PropertyChangeEvent,getter也不是默认的;但是每个变量的代码实际上是相同的) 我想问的不是仅仅创建80个函数和(某种程度上)复制粘贴所有内容,而是是否可以通过(静态)元编程(或者我不知道的其他方式)来实现这一点 我以前在ruby上做过很多工作,我大概只写了如下的sthg:在Java/Kotlin中通过静态元编程创建函数,java,kotlin,metaprogramming,abstract-syntax-tree,Java,Kotlin,Metaprogramming,Abstract Syntax Tree,我有一个大约有40个成员变量的类。现在我想为它们创建getter和setter(它们需要触发一种PropertyChangeEvent,getter也不是默认的;但是每个变量的代码实际上是相同的) 我想问的不是仅仅创建80个函数和(某种程度上)复制粘贴所有内容,而是是否可以通过(静态)元编程(或者我不知道的其他方式)来实现这一点 我以前在ruby上做过很多工作,我大概只写了如下的sthg: instance_variables.each do |var| define_method "g
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(用于生成)中都是有用的,类似的东西是可能的,所以我不能相信这是不可能的。 我已经读到注释是java的起点,但我也读到,人们(通常)不能用注释更改现有的类
我已经读过,在那里你可以注释字段来为它们生成普通的getter和setter,hashCode和equals函数以及其他很多东西,但是开发人员指出,这是一个有很多私人编译器API的黑客行为,它们可以随时中断。这并不是我首先想要的(因为我的IDE足够智能,可以直接创建它们,而不需要这些技巧) 样板代码令人讨厌,而且会弄脏代码,但是复制粘贴真实代码是我讨厌的事情,因此问题就来了
我必须承认,我不知道Kotlin的情况如何,但我听说扩展应该是切入点。如果这更简单(或者至少是可能的话),我也愿意这样做。除了您提到的预编译器之外,我不知道在Java中有什么干净或简单的方法可以做到这一点。在Kotlin中,您可以使用属性委托执行所描述的操作。看看Scala。它有宏(但它们没有你想要的那么强大)