问题标签 [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.
spring-boot - 带有 proguard 的 kotlin-reflect 会导致反射错误
我将 ProGuard 用于我的 Spring Boot 应用程序代码。升级到 Spring Boot 2 后,我无法再启动我的应用程序。
Spring Boot 2 使用 kotlin-reflect 创建 bean,kotlin.Metadata
在反射期间使用注解。此注解具有未混淆的值,因此 kotlin-reflect 正在寻找具有原始名称的方法。并引发以下异常:
kotlin.reflect.jvm.internal.KotlinReflectionInternalError: Could not compute caller for function: public constructor ProjectService(...
ProjectService
被混淆为F
,因此没有这样的构造函数。
当我保留类名时,我在其他地方也有同样的问题:
kotlin.reflect.jvm.internal.KotlinReflectionInternalError: Could not compute caller for function: public open fun addRole(...
有没有办法修复kotlin.Metadata
注释参数的混淆?注释本身没有被混淆,它仍然引用原始类名,这些类名被写为字符串值。我也试图混淆元数据注释无济于事。
kotlin - 使用 kotlin-reflect 查找数据类属性的数据类型
给定一个简单的数据类,例如:
有什么方法可以kotlin-reflect
用来查找属性的数据类型吗?我通过以下方式获得了所有属性:
我只知道allFields["number"].returnType
返回 a KType
。我想不出一种方法来检查 aKType
是Int
还是Long
.
我试图避免我目前用来将传入的 JSON 数字数据转换为适当的数据类型的代码:
java - How do I reflect a private static nested subclass?
First, I'm looking for an answer in Kotlin, but I'm interacting with a Java library.
I need to get an instance from a private static nested class, derived from an instance of the surrounding superclass.
Given you have these (simplified) nested Java classes
I get back a Container instance as a GLFWKeyCallback, by way of another external method. You can think of this method as:
in Kotlin:
kotlin - Kotlin - 通过 id 或字符串获取类实例属性值的高性能和可扩展方式
我想让一个类的属性及其子类在运行时通过整数 id 或属性名称进行读写,其性能尽可能接近常规编译的读写。这个类可能有很多实例,它的子类(最多 100 万个),每个类可能有数百个属性,所以我想最小化每个类实例中每个属性使用的内存。
我看到的广泛的解决方案组正在使用反射,使每个属性成为可变类的实例,然后保留这些映射,或者编写巨大的 when 语句。
我已经测试了反射实现的性能(见下文)。在我的测试中,这需要 15 倍于直接访问该属性的时间。
这可以改进,还是有更好的方法来做到这一点?
kotlin - 使用反射调用具有默认参数值的函数
考虑一个接口:
及其(最小)实现:
我也在尝试func
通过FooImpl
反射来调用:
但我得到以下异常:
kotlin.reflect.jvm.internal.KotlinReflectionInternalError:此可调用对象不支持默认调用:public abstract fun func(argWithDefault: kotlin.String = ...): com.example.Foo[DeserializedSimpleFunctionDescriptor@2d7275fc] 中定义的 kotlin.Unit
Foo::func.parameters[1].isOptional
返回true
,并且根据文档,isOptional
返回
如果此参数是可选的并且可以在通过 KCallable.callBy 进行调用时省略,则为 true,否则为 false。
所以我想这应该是可能的。
unit-testing - 如何从kotlin中的对象获取java类?
我正在尝试mockito
模拟一个getValue
使用 java 类作为参数的函数。
为了简化,我做了以下测试:
如印刷品所示,输入的类型与map["K"]!!::class.java
不同Long::class.java
。
如果我使用内联类型模拟该方法,它可以工作:
我怎样才能以类型参数不由长开关逻辑确定的方式模拟该方法?
kotlin 和 java 类型中的一些内容可能会有所帮助。
android - IllegalStateException:分析失败:java.lang.AssertionError:注释树尚未归属:@kotlin.Metadata
在 Android Studio 3.4.1 中从 Kotlin 1.3.21 更新到 1.3.30+ 时,我们收到以下构建错误:
@kotlin.Metadata 背后的一切都不同,但在此之前它保持不变。使用 Kotlin 1.3.21 及更早版本,一切正常。
我们使用@kotlin.Metadata 来检查一个类是否是 Gson TypeAdapterFactory 的 Kotlin 类
以及通过混淆规则跳过自定义注释
但即使我们删除这些用法,错误仍然保持不变。
我们如何修复这个错误?
构建.gradle
应用程序/build.gradle
kotlin - 使用反射在Kotlin中按字符串设置属性?
我有一个对象:
和对列表:
我想迭代槽对列表并使用反射为给定属性设置适当的值。
android - Kotlin 反射:在 R8 混淆中找不到primaryConstructor
在我当前的 Kotlin Android 项目中,我只需要面对以下问题:
对于此类层次结构
我写了一个这样的创建者函数:
这对于调试版本非常有效,但对于打开 R8 混淆的发布版本,构造函数总是null
. 我对 R8 的设置是这样的:
在对 Kotlin 反射 API 进行了一些逆向工程之后,我想出了以下解决方法:
这似乎表明,类的构造函数信息由 R8 保留,但有关作为主构造函数的元信息会丢失。
有谁知道一般如何解决这个问题?