首页 > 解决方案 > 通过 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 应该是那里的入口点。如果这更容易(或至少可能),我也对此持开放态度。

标签: javakotlinmetaprogrammingabstract-syntax-tree

解决方案


推荐阅读