使用反射来传递和修改基元而不使用数组

时间:2017-11-08 09:57:32

标签: reflection kotlin

使用imgui port,我总是使用原始数组来模拟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);

kotlin:

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

我只需要在KMutableProperty0<Boolean>上容纳相应的checkbox(),我也会仔细检查以便在同一个函数中设置该字段:有一个get(): Boolean和一个set(Boolean)

我担心的是:

  • 这对java有用吗?

  • 如果我沿着这条路走下去,我应该注意哪些禁忌症吗?如表演还是其他什么?

因为我觉得因为这种做法有点笨拙和肮脏

1 个答案:

答案 0 :(得分:2)

  

这对java有用吗?

一件不起作用的是引用Kotlin用于表示Java getter和setter的合成属性,例如: getFoo + setFoofoo(并且您不能使用绑定的可调用引用bar::foo)。目前不支持此功能。

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

  

如果我沿着这条路走下去,我应该注意哪些禁忌症吗?如表演还是其他什么?

绑定的可调用引用包含对接收者的引用,因此style::antiAliasedLines将保留style来自GC,并且您必须小心存储哪些可调用引用。