使用反射来传递和修改一个基本而不使用数组

在一个imgui 端口上工作,我总是使用原始数组来模拟c ++指针/地址传递。

例如:

checkbox("Anti-aliased lines", bool.apply { set(0, style.antiAliasedLines) }) style.antiAliasedLines = bool[0] 

其中bool: BooleanArray

我只是探讨了直接传递字段的可能性,而不是c ++:

ImGui::Checkbox("Anti-aliased lines", &style.AntiAliasedLines);

科特林:

checkbox("Anti-aliased lines", style::antiAliasedLines })

我只需要在checkbox()上容纳一个对应的KMutableProperty0<Boolean> ,并且我也进行了double检查,以便可以在同一个函数中设置该字段: get(): Booleanset(Boolean)

我的顾虑是:

  • 这与Java的发挥不错?

  • 如果我沿着这条路走下去的话,有没有什么禁忌我应该知道的? 比如演出什么的?

因为我有这样的感觉,因为这种方法是不知羞耻和肮脏的

这对java有好处吗?

有一件事情是不可行的,那就是引用Kotlin用来表示Java getter和setter的综合属性,例如getFoo + setFoofoo (并且不能使用绑定的可调用的引用bar::foo )。 目前尚不支持。

您可以尝试通过自定义的KMutableProperty0实现来解决这个问题,该实现接受对Bar::getFooBar::setFoobar未绑定可调用引用,并在获取和设置其值的意义上充当属性引用。

如果我沿着这条路线走下去,有什么禁忌我应该知道的? 比如演出什么的?

一个绑定的可调用引用保存了对接收者的引用,所以style::antiAliasedLines将保留来自GC的style ,并且必须小心存储哪些可调用的引用。