问题标签 [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 投票
1 回答
311 浏览

spring - When does Kotlin introspection become available in the lifetime of a Spring Boot Application?

I ran into a surprising bug. I am trying to make an application that would access mongodb using the repository pattern. In order to reduce code duplication I wanted to make a common base class for all repositories. The repository of each root aggregate (such as Person in code bellow), would inherit from this RepositoryBase and inherit all the common functionality.

However, this does not seem to work:

java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.JvmClassMappingKt.getJavaClass, parameter $receiver

at kotlin.jvm.JvmClassMappingKt.getJavaClass(JvmClassMapping.kt) at com.example.demo.RepositoryBase.count(DemoApplicationTests.kt:18) ...

It seems that at the time Person::class is being called, the introspection capabilities are not fully initialized and the subsequent call to KClass.java, which is defined as:

results in the null-exception.

I would like to know if there are some rules on using introspection in Spring applications or whether this is a bug either in Kotlin or in Spring.

0 投票
0 回答
602 浏览

gradle - 在 Kotlin Android 库项目中出现未解决的参考错误

我在 Kotlin Android Library 项目中遇到未解决的参考错误。

1.) standard_kotlin_lib.jar --> 包含:Kotlin 类,META-INF/standard_kotlin_lib.kotlin_module

2.) A.aar --> 只编译standard_kotlin_lib.jar 文件。编译后,在生成的 A.aar 文件的 classes.jar 里面: META-INF/standard_kotlib_lib.kotlin_module is missing, infect whole META-INF is missing

3.) B.aar --> 编译 A.aar。这里,kotlin 源代码导入类定义在“standard_kotlin_lib.jar”中。导入时出现未解决的参考错误

B.aar <-- A.aar <--standard_kotlin_lib.jar

工具版本:1.)我正在使用 android gradle 插件 3.0.0 和 gradle 版本 4.3.0。使用以前的插件版本,即 2.2.3 和 gradle 版本 3.2.1,不会出现此错误。Kotlin 版本是 1.1.4

我认为的问题:1.) A.aar 文件中缺少 META-INF。当我手动复制 A.aar 的 classes.jar 中的 META-INF 时,B.aar 编译成功。

0 投票
1 回答
325 浏览

android - Kotlin static constant field returning modified String value

I'm trying to reach a constant String value of the Class name. But I really don't understand why I get a modified String value. Here is the code that I'm working on:

In another class trying to reach the value like this:

Why Am I getting packagePath.TestClass$Companion at the end of the String value? I'm expecting to get packagePath.TestClass

Thanks

0 投票
1 回答
169 浏览

mongodb - 在带有 MongoDB 的 Spring Boot M7 中找不到 ReflectKotlinClass

如果你在 start.spring.io 上使用 Web 和 MongoDB 模块创建一个新的 Spring Boot 项目,添加任何 @Document 注释类,另外将 kotlin.version 从 1.2.10 升级到 1.2.21,你会得到一个 NoClassDefFoundError:

当 @Document 注释类被删除时,应用程序启动时没有问题。

从错误消息看来,MongoDataAutoConfiguration 需要 ReflectKotlinClass,它在类路径中找不到。kotlin-reflect 模块在依赖列表中。是否需要任何其他 kotlin 模块?

0 投票
1 回答
389 浏览

lambda - (反思)隐式和显式 lambda 声明

我试图理解反射。我有以下代码:

get为什么我在声明 lambda 时不能调用(参见错误注释)?lengthL1和有什么区别lenghtNL1吗?

0 投票
1 回答
1254 浏览

android - Kotlin-reflect 和 android gradle 插件 3.1.0

我在我的项目中使用 org.jetbrains.kotlin:kotlin-reflect 库(包含在 gradle 依赖项中)。

该应用程序一直运行没有任何问题,但是在将 android gradle 插件升级到最新版本 3.1.0 后,该应用程序开始在一台设备(Nexus 5、Android 4.4.3)上崩溃。日志如下:

E/AndroidRuntime: FATAL EXCEPTION: kotlin.jvm.KotlinReflectionNotSupportedError: 在运行时找不到 Kotlin 反射实现。确保在 kotlin.jvm.internal.ClassReference.getSimpleName(ClassReference.kt:23) 的 kotlin.jvm.internal.ClassReference.error(ClassReference.kt:86) 的类路径中有 kotlin-reflect.jar

我认为这不是预期的行为,但也许有人找到了解决方法/解决方案?

现在我被迫将 android gradle 插件降级到 3.0.1 以防止应用程序崩溃。

=====================

我试图重新创建导致崩溃的环境,但是我没有设法重现崩溃。因为这只发生在较旧的android版本(pre-L)上并且在升级引入了一些dex优化的android gradle插件之后,我的猜测是它在某种程度上相关。

=====================

对于那些将此问题标记为重复的人

我不确定是否可以更清楚地说明这一点:其他票是关于缺少依赖的。我的 build.gradle 中有 kotlin-reflect 依赖项。此外,我的应用程序适用于更高的 Android 版本以及将 android gradle 插件降级到 3.0.1 之后。由于缺少依赖项,这不适用于任何版本的 android gradle 插件。因此,其他问题的答案对此问题无效。

0 投票
2 回答
2435 浏览

kotlin - 以允许可空类型和使用该类型参数声明 `KClass 的方式声明函数泛型类型参数`

KClass定义为public interface KClass<T : Any> : KDeclarationContainer, KAnnotatedElement, KClassifier

这很棘手,因为 a 的类String?应该是KClass<String>,但不可能获得。

鉴于以下 3 个示例(它们应该都做基本相同的工作),其中 1 个无法编译,其他的返回相同的运行时类型。

问题的关键是要问:我怎样才能获得test1具有编译时行为(和安全性)的运行时行为test2

编辑:问题的最后一个附录是另一个示例,它演示了获取可为空类型的类的问题。

我特别遇到问题的呼叫站点是:

这里唯一的错误是 with KClass<T>,而不是 with T::class,这很好。我希望允许消费者将可空性指定为合同的一部分,因此添加Any约束将不起作用。如果我只是KClass<T>变成KClass<Any>,这一切都有效(这证明没有运行时问题,只有编译时间)。这最终是我选择的解决方法,但如果我能真正保持正确的类型,那就太好了。

0 投票
2 回答
124 浏览

kotlin - KClass::memberExtensionFunctions 始终为空

代码

输出为空

0 投票
1 回答
650 浏览

reflection - 如何通过反射收集成员以稍后作为参数传递

所以,我正在研究一个涉及自动写入ByteBuffer类扩展内容的概念Bufferizable

这个想法是声明,例如,以下

然后每当uboVS to address第一次调用时,它都会被初始化,然后按照指定的顺序将其内容写入本机地址。

但是我唯一遇到的问题是收集成员以稍后作为参数传递给第 i 个addFunction

因为编译器在这里抱怨:

错误:(328, 37) Kotlin: Out-projected type 'KProperty1' 禁止使用'public abstract fun get(receiver: T): R defined in kotlin.reflect.KProperty1'

我该如何解决?

0 投票
1 回答
491 浏览

kotlin - 从 kotlin 中的嵌套类型参数获取类

我有一个这样的 val

如何从此变量中获取ProfileModel.PersonalInfo的类?

换句话说,什么表达式(当然涉及 qs)应该替换Any以便该测试通过。

感谢您的关注