问题标签 [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.

0 投票
0 回答
1087 浏览

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注释参数的混淆?注释本身没有被混淆,它仍然引用原始类名,这些类名被写为字符串值。我也试图混淆元数据注释无济于事。

0 投票
2 回答
2397 浏览

java - 带有 Proguard 的 Kotlin 反射失败

假设我有这门课

当我 proguard 并运行应用程序时,我收到以下异常

我还发现这个反射代码库引发了这个问题。任何帮助,将不胜感激

0 投票
1 回答
1676 浏览

kotlin - 使用 kotlin-reflect 查找数据类属性的数据类型

给定一个简单的数据类,例如:

有什么方法可以kotlin-reflect用来查找属性的数据类型吗?我通过以下方式获得了所有属性:

我只知道allFields["number"].returnType 返回 a KType。我想不出一种方法来检查 aKTypeInt还是Long.

我试图避免我目前用来将传入的 JSON 数字数据转换为适当的数据类型的代码:

0 投票
2 回答
204 浏览

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:

0 投票
1 回答
529 浏览

kotlin - Kotlin - 通过 id 或字符串获取类实例属性值的高性能和可扩展方式

我想让一个类的属性及其子类在运行时通过整数 id 或属性名称进行读写,其性能尽可能接近常规编译的读写。这个类可能有很多实例,它的子类(最多 100 万个),每个类可能有数百个属性,所以我想最小化每个类实例中每个属性使用的内存。

我看到的广泛的解决方案组正在使用反射,使每个属性成为可变类的实例,然后保留这些映射,或者编写巨大的 when 语句。

我已经测试了反射实现的性能(见下文)。在我的测试中,这需要 15 倍于直接访问该属性的时间。

这可以改进,还是有更好的方法来做到这一点?

0 投票
1 回答
1230 浏览

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。

所以我想这应该是可能的。

0 投票
1 回答
312 浏览

unit-testing - 如何从kotlin中的对象获取java类?

我正在尝试mockito模拟一个getValue使用 java 类作为参数的函数。

为了简化,我做了以下测试:

如印刷品所示,输入的类型与map["K"]!!::class.java不同Long::class.java

如果我使用内联类型模拟该方法,它可以工作:

我怎样才能以类型参数不由长开关逻辑确定的方式模拟该方法?

kotlin 和 java 类型中的一些内容可能会有所帮助。

0 投票
0 回答
1311 浏览

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

0 投票
2 回答
2511 浏览

kotlin - 使用反射在Kotlin中按字符串设置属性?

我有一个对象:

和对列表:

我想迭代槽对列表并使用反射为给定属性设置适当的值。

0 投票
1 回答
643 浏览

android - Kotlin 反射:在 R8 混淆中找不到primaryConstructor

在我当前的 Kotlin Android 项目中,我只需要面对以下问题:

对于此类层次结构

我写了一个这样的创建者函数:

这对于调试版本非常有效,但对于打开 R8 混淆的发布版本,构造函数总是null. 我对 R8 的设置是这样的:

在对 Kotlin 反射 API 进行了一些逆向工程之后,我想出了以下解决方法:

这似乎表明,类的构造函数信息由 R8 保留,但有关作为主构造函数的元信息会丢失。

有谁知道一般如何解决这个问题?