gpt4 book ai didi

reflection - 在 kotlin 中使用反射更改访问修饰符

转载 作者:行者123 更新时间:2023-12-02 12:47:29 25 4
gpt4 key购买 nike

我知道在 Java 中,如果我想使用反射来设置最终字段,我可以像这样更改该字段的访问修饰符:

Field field = clazz.getDeclaredField("someField");
field.setAccessible(true);

Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);

我很难在 Kotlin 中实现同样的目标。问题出在最后一行 modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL) 上的按位运算符。诚然,我对一般的按位运算符有些无知,也不知道 kotlin 的等价物。

最佳答案

发布问题后我立即找到了解决方案。正在使用的按位运算符及其 Java 表示是 AND ($) 和 按位补码 (~) .

在 kotlin 中,AND 按位运算符是 Int 类的中缀函数 and .类似地,按位补码 运算符也是一个函数,inv , 在 Int 类上。

kotlin中修改修饰符的方法是:

val field = clazz.getDeclaredField("someField")
field.isAccessible = true

val modifers = field.javaClass.getDeclaredField("modifiers")
modifers.isAccessible = true
modifers.setInt(field, field.modifiers and Modifier.FINAL.inv())

关于reflection - 在 kotlin 中使用反射更改访问修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53760431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com