问题标签 [kotlin-reflect]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
kotlin - 枚举包中定义的扩展属性
我正在用 Kotlin 编写 HTML 模板语言。
我的模板引擎将需要解析属性表达式,例如,不仅要在 's 的类和超类中定义的成员中obj.myProperty
查找,还要在用户指定的 Kotlin 包列表中定义的扩展属性中查找。"myProperty"
obj
例如,如果我的解释器正在评估x.absoluteValue
并且x
结果是一个 Int,我有以下信息:
- 对象 KClass:
Int::class
- 物业名称:
"absoluteValue"
- 用户要求搜索的包列表:
kotlin.math
等。
我可以使用什么 API 来获取给定包中定义的所有顶级扩展属性kotlin.math
的列表,例如,作为反映项目的列表,例如List<KProperty<*>>
?在模板编译时(即 Kotlin 运行时),我将浏览该扩展列表并寻找一个"absoluteValue"
与 Int 接收器兼容的名称。
我知道我可以手动定义扩展属性列表,例如listOf(Int::absoluteValue, ...)
在导入它们之后,但我希望我的用户指定一个包列表,而不是单个属性。
更新:我决定将我的模板引擎基于 Kotlin 的 JSR-223 支持,javax.script.ScriptEngineManager
因此使用稳定的 API 并让 Kotlin 编译器在它认为合适的时候解析扩展属性。
java - Kotlin:javaSetter 方法未编译
我使用以下方法检索了我班级的一个属性:
我可以做这个:
但是这个方法不能编译:
即使该方法存在且未被弃用
kotlin - 我在 Kotlin KClass 中看不到私人成员
我正在开发一个使用反射的库,我想操作给定 KClass 的所有属性/函数。
使用该KClass::members
属性,我可以操作所有可访问的成员(根据文档),即:公共、内部和受保护的字段、属性和函数。但我看不到私人的。
使用 Java 反射,我可以使用 . 查看所有字段(包括私有字段)Class.getDeclaredFields()
,同样我可以使用 . 查看私有方法Class.getDeclaredMethods()
。
有没有办法使用 kotlin 反射 API 来做到这一点?
kotlin - 如何使用反射更改 kotlin 私有验证?
我可以使用反射访问私有 val 值,如下所示
但是如果我想改变info
,我怎么能用反射来做呢?
kotlin - 如何在kotlin中的主要构造函数参数上添加注释
具有以下课程:
并尝试使用
没有找到注释。我必须移动参数前面的注释才能使其正常工作
这是jetbrains的解析错误还是正常行为?
编辑
你可以在这里找到注释:
kotlin - 如何找到一个 lateinit var 是否已通过反射初始化?
我想通过反射找出对象的 lateinit 属性是否已初始化。我该怎么做呢?
在 UninitializedPropertyAccessException 中获取属性并检查非空结果
kotlin - DelegatedProperty 反射不适用于发布版本
在运行时,我需要访问委托属性的委托实例中的属性。
当我在调试中编译以下代码时,它工作得很好:
当我在调试中调用“doStuff”方法时,“key”val 将获得“This is the key”字符串。
但是,当我在发行版中编译此代码时,出现错误:
2019-11-07 16:16:04.141 7496-7496/? E/AndroidRuntime:致命异常:主进程:com.trax.retailexecution,PID:7496
eaaaj0:属性“somePropGoesHere”(JVM 签名:getSomePropGoesHere()I)未在 com.trax.retailexecution.util.Potato 类中解析
在 eaaapc(KDeclarationContainerImpl.kt:40)
在 eaaaz$d.invoke(KPropertyImpl.kt:4)
在 eaaal0.a(ReflectProperties.java:4)
在 eaaaze(KPropertyImpl.kt:2)
我不确定如何
在 eaaaz$e.invoke(KPropertyImpl.kt:1)
在 eaaam0.a(ReflectProperties.java:3)
在 eaaazi(KPropertyImpl.kt:1)
在 cmabaa(DefaultConfigurationFactory.java:82)
在 cmabaa(DefaultConfigurationFactory.java:153)
在 com.trax.retailexecution.util.Potato.getKey(Potato.kt:1)
在 mynamespacegoeshere.PotatoShredder.doStuff(Potato.kt:2)
我认为它与proguard有关,因为我们在压缩/收缩期间删除了类和/或方法,但我真的找不到正确解决问题的方法。
android - Kotlin 运行时错误 kotlin.Any 未找到
我有一个多模块项目。对于相同的构建,apk 的大小可能会相差300KB
(from 17 to 17.3MB)
. 在运行时的构建17MB
中,我收到一个错误:
同样在项目中,配置了混淆。但我不认为这是由这个引起的。清理、无效和重新启动并不总是有帮助。
java - 从类路径中获取所有类,这些类通过 X 的超类继承类 X
假设我有一个密封的类 A,B 和 C 继承了它。
现在,我在类路径中的单独文件中有几个类:com.dummy
继承类 B 或 C
现在,我想扫描给定 B 或 C 的类路径和超类类型的所有类,即 A。
我试图实现它但没有工作的片段
这将返回 0 个类。如果我改变 getSubTypesOf(B::class.java),那么我就能得到所有继承 B 的类。