问题标签 [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 - 是否可以复制 KClass 并更改其属性?
我想做的是使用 Kotlin 反射来制作一个类的副本并将其所有属性设置为可选/可为空。
例如
显然 KClass 和 KType 没有copy
方法。有什么办法可以实现我想做的事情吗?
kotlin - 如何使用反射查看一个类是否有一个 init 块?
如果我有一个像下面这样的 Kotlin 类:
我如何确定这个类有一个使用反射的 init 块?
init 块没有出现在中Foo::class.members
,我看不到从Foo::class.constructors
.
有什么方法可以找到有关使用 init 块的信息kotlin.reflect
?
kotlin - Kotlin 是否可以委托函数或函数参数?
我想要例如:
无论是反射还是其他方式。
我目前拥有的是:
这样我就可以打电话
但是我需要发送不知道的参数。我希望我的编译器知道可以发送哪些参数。否则,我可以编写以下内容,直到运行时才会失败:
请注意,我希望它具有不同的名称,而不是使用接口。
kotlin - 为什么我不能访问`::class.companionObject`?
给定类的实例,我正在尝试使用已知接口访问未知类的伴随对象。
下面的代码:
输出:
我认为这不是以下任何一个问题的重复,因为我特意询问发生了什么变化或我误解了什么,因此以下两个问题中的解决方案对我不起作用:
android - 使用 proguard / R8 删除数据类元数据
我有一个包含一些数据类的包,我试图在运行时使用 Kotlin 反射访问构造函数clazz.primaryConstructor
,一切都按预期工作,但是当我启用 R8 时,数据类元数据被删除,例如当我检查KClass isData
它是否返回 false并且主构造函数也是空的,只有在启用 R8 时才会发生。我尝试了一切,包括将@keep
注释添加到所有数据类并添加规则以将所有内容保留在模型包中,我还添加了这些规则
但仍然没有运气,知道出了什么问题或如何解决这个问题吗?
提前致谢。
kotlin - 如何使用与发布版本中相同的混淆文件对函数进行单元测试?
在我的应用程序中,我最近将 Kotlin 从 1.5.31 更新到了 1.6.10。从那时起,使用反射 (kotlin-reflect) 的特定功能停止按预期工作。它在 1.5.31 中运行良好。
现在,当我运行调试版本时,该功能可以正常工作,但是当我运行发布版本(缩小和混淆的版本)时,它却没有。
这是我纯偶然发现的(不幸的是,我没有使用 TDD……是的,我知道我应该这样做,但有时我们学习困难重重),所以我决定是时候开始测试以避免这种意外问题了,尤其是这个。
我一直在做一些研究,但我没有发现如何做这个具体的事情。
这个想法是能够运行一个测试来捕捉这个问题,这个问题只有在代码被混淆时才会出现。
我已经实现了一个简单的测试并且测试没有失败,因为它使用的代码没有被混淆。
测试如下:
您可能已经猜到了,我的文件中-keep
实现了一些规则proguard-rules.pro
,否则即使在 Kotlin 1.5.31 上代码也无法运行。
我一直在阅读有关testProguardFiles
gradle 的内容,但我不知道这是否有用,或者至少我无法使其按预期工作。
这是我build.gradle
文件的一部分:
如果您需要任何其他信息,请在评论中告诉我,我很乐意分享。
以防万一,让我们澄清一下,这个问题的目的是知道如何进行测试,当代码由于被混淆而改变其行为时应该失败的测试,而不是在 Kotlin 版本之间发生了哪些改变而破坏了我的代码......是另一个故事。
kotlin - Kotlin - 合并两个数据类
数据类
以 json 表示的类数据值。
我想将元素与“ALLOGENE THERAPEUTICS”和“CELECTIS”的关键值结合起来,并用“STUB”替换关键值。
组合元素时,必须组合所有“计数”值。
并且必须添加不存在的元素。
因此,结果应如下所示。
如何使用 Kotlin 巧妙地编写代码?
作为参考,数据类的值用json表示,结果值必须是数据类。
这是迄今为止的进展:
为创建合并副本的数据创建一个函数
将合并列表折叠成单个数据项并将它们重新添加到一起。
并结合子元素。
这是目前的情况。
这样,深度为2的元素会正常工作,但深度为3的元素不会被添加。
例如,STUB 下最多“N”被组合,但“N”下的“S1”和“S2”不被组合。
因此,以这种方式输出当前结果。
所有的子元素如何组合和实现?
kotlin - 如何找到伴生对象所有者的 KClass?
我正在尝试获取拥有伴随对象的类,以便我可以在伴随对象中使用内联技术创建记录器,但引用正在记录的主类而不是伴随对象。
问题是我找不到获得伴生对象所有者的方法,我该怎么做?
预期的用例:
A:
乙:
kotlin - 如何在运行时检查 Kotlin 类型(KClass)是否为基本(原始)(例如反射 API)?
Kotlin 规范将基本类型声明为“某些类型可以具有特殊的内部表示 - 例如,数字、字符和布尔值可以在运行时表示为原始值”。https://kotlinlang.org/docs/basic-types.html
然而,我没有想出任何方法来知道 Kotlin 中的类型表示,即实例KClass
是否是基本类型?
范围
我们需要将String
值解析并转换为强类型实例,对于“基本类型”,我们希望使用相应的to<basic type>
辅助方法,如 JavavalueOf
或装箱。
android - Moshi:什么时候需要反射?
目前使用 Moshi 和 Retrofit 但需要回顾一下,因为我注意到我没有正确实施它并且在添加kotlin-reflect
依赖项时感到困惑。
根据自述文件
反射适配器需要以下附加依赖项:
我认为上述依赖项是实际的 Moshi 依赖项,但似乎不需要它,除非您使用KotlinJsonAdapterFactory
. KotlinJsonAdapterFactory
无论如何,它负责将 Kotlin 类转换为 JSON 吗?
目前我有这个依赖和注释处理器。
如果我仅将 Moshi 与 Codegen 一起使用,我可以删除其他的并最终只依赖这两个依赖项吗?