Tag: reflection

Java构造函数reflection抛出与密封类的exception

我在Kotlin项目中有以下密封课程: sealed class Test { abstract val test: String @NoArg data class Test1( override val test: String ) : Test() @NoArg data class Test2( override val test: String ) : Test() } @NoArg注释是一个标记,编译器被配置为为这些类生成一个无参数构造函数。 我的问题是,尝试使用Javareflection结果实例化Test1和Test2中的以下exception: Exception in thread “main” java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at MainKt.main(Main.kt:27) Caused by: java.lang.IllegalAccessError: tried to […]

Kotlin语言在运行时获得类

假设我们有以下几点: val person = “Bill” 有人可以解释这两者之间的区别: val kClass1 = person.javaClass.kotlin VS val kClass2 = person::class 当我应该叫那个而不是另一个? 任何源代码示例将不胜感激。

如何迭代通过JsonObject的属性递归?

我将字符串解析为JSON对象,我需要能够递归地迭代对象的属性。 所以我试图创建一个函数迭代通过对象的属性,如果一个属性不是一个原语,然后再次调用该函数(递归)与属性本身。 在JavaScript中,我会解决这个问题: function forEachAttribute(object) { for (let key in object) { let attribute = object[key]; if (typeof attribute === “object”) { forEachAttribute(attribute); } else { console.log(key + “: ” + attribute); } } } let myObject = { innerObject: { x: 123 }, y: 456 }; forEachAttribute(myObject); 但是我正在摆脱Javascript,并试图学习如何使用Kotlin。 所以我find了一个遍历JSON对象属性的方法 。 但我不太明白如何确定属性是否是一个原始的。 import kotlin.js.Json fun […]

什么是从KType创建类实例的正确方法

我有两个类可能看起来像这样 class MyClass { var myProperty: AnotherClass? } class AnotherClass { } 通过reflection我遍历MyClass的属性,当我find一个KMutableProperty这是null我想创建该类的一个实例。 现在我正在做这样的事情 val instance = MyClass() val property = MyClass::myProperty var subInstance = it.getter.call(instance) if (subInstance == null) { it.setter.call(instance, property.returnType.jvmErasure.createInstance()) } 但这似乎是一个可怕的黑客,需要知道内部使用Java魔法而不是纯粹的Kotlin,有没有一个正确的方法来做我想要的? 或者这是正确的方式?

当声明站点协变时,强制types参数在使用地点不变

我正在KProperty1上构建一个扩展函数。 即使KProperty1在types参数R是协变的,该函数也需要接受扩展属性( R )的值types的参数。 一个稍微人为的例子将是以下,虽然我的使用更合法。 data class Data(val value: String) fun KProperty1.setMagically(value: V) { this.javaField?.set(null, value) } fun test() { // I would like this to fail to compile Data::value.setMagically(190) } 似乎编译器推断出R的typesAny ,这是完全有效的,因为KProperty1 : KProperty1 我想要说的是,对于我的具体情况,我确实希望V是不变的。 我知道你可以使用out和in作为差异的宽度,但我无法弄清楚如何指定我想重写KProperty1上的协变注释,这种情况下是不变的。 值得注意的是,它与KMutableProperty1效果很好,因为它在R中是不变的。 但是我的代码也需要使用非可变属性。 对于上下文,我建立一些东西,生成数据库查询,这就是为什么我需要的价值是属性types的子类,即使我没有写入属性,但这个问题比我的具体,物业处理案件。

从字符串实例化一个函数?

我有一个函数定义在一个字符串,并需要一种方法来实例化它: val myFunction = “””fun (file:Int, rank:Int, playerHasWhite: Boolean): Boolean { val a = file + 3 val b = rank – 2 if (playerHasWhite) a>b else a<b } """ 那么,是否有一个简单的方法,通过reflection来实例化myFunction? (我注意到我可能需要jar kotlinreflection)

在Java方法中引用reflectionAPI的一部分

在Kotlin中,方法引用的结果放在包kotlin.reflect中。 Java中的方法引用也是reflection-api的一部分吗?

如何获得.kt文件中的所有类的列表

是否有可能获取.kt文件中的类的列表? 看来,KDeclarationContainer是我正在寻找的类,但我不确定如何使用它。 编辑:我正在使用Kotlinreflection。

检查类是否实现了接口。 科特林

我想检查SignalPayload的子类实现接口IConvertible 。 我怎样才能做到这一点? sealed class SignalPayload { companion object { fun trueTypeInstance(type: KClass) : SignalPayload? { // if (*** __ KClass implemented IConvertible ___ **) …… } } } object Empty : SignalPayload() data class BadData(val message: String = “BAD”) : SignalPayload() { override fun toString(): String { return message } } data class payloadString(private […]

如何访问generics类参数中的属性/方法

来自C#的Kotlin新手。 我想创建一个类,通过generics需要一个可互换的类对象。 在类中,我想访问类中的属性值和调用方法。 我认为这必须通过某种反思机制。 挖掘Kotlin引用我一直在尝试应用建议到我的代码,但是我得到一些神秘的错误。 任何帮助表示赞赏。 Error:(35, 20) Kotlin: Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: @InlineOnly public operator inline fun Lazy.getValue(thisRef: Any?, property: KProperty): T1? defined in kotlin @InlineOnly public operator inline fun Map.getValue(thisRef: Any?, property: KProperty): T1? defined in kotlin.collections @SinceKotlin public fun Map<Class, T1?>.getValue(key: Class): […]