Tag: 反射

Kotlin KFunction反射 – 获取参数值

为了创建一个记录函数调用的简单注解,我试图从一个说有注释的函数中获取以下属性: 函数名称 参数名称 参数值 到目前为止,我使用KCallable作为一个值,这使得从KParameter列表中获取名称和名称非常简单。 但是,我不知道如何获得所述参数的值,使日志语句更上下文。 有没有人有想法抓住注释中的这些参数值? 它不需要使用KCallable ,就好像是最直观的接收器。

简单的方法来找出一个类是匿名/对象,并从Kotlin实例中获取具体的类名

在实现toString等时,我有时会打印/记录具体的类名。 是否有一个容易/提供的方式来获得这个甚至匿名类? 看起来Kotlin反射库中的方法比java少。 目前,我正在这样做: instance::class.qualifiedName?: instance::class::superclasses.get()[0].qualifiedName) 这真是丑陋,我不知道是否每次都保证是正确的,除非超类的列表是排序的。 有没有像java.lang.reflect中的kotlin反射方法,就像输入someClass.isAnonymous()一样简单?

Kotlin:泛化的泛型似乎不适用于hash / equals比较

我有一个KClass到Int的地图。 然后我有一个具有泛化类型的函数。 然后,我会期待以下情况,因此,给我关联与Boolean::class的Int val kclassToInt = mapOf(Boolean::class to 1, Byte::class to 1, Short::class to 2) inline fun <reified T> myExpectations() = assertEquals(1, kclassToInt.getRaw(T::class), "Why doesn't it work? :'(") 我迎接了Why doesn't it work? :'(. Expected <1>, actual <null>. Why doesn't it work? :'(. Expected <1>, actual <null>.从调用它像这样myExpectations<Boolean>() 。 然后我试图使用.java关闭,所以我使用Java的Class而不是Kotlin的KClass 。 val classToInt = mapOf(Boolean::class.java to 1, […]

Kotlin伴侣对象和反射

在使用伴随对象和Java反射时,可以进入一些有趣的事情。 我不确定它是否有意,或者我只是不完全理解事情。 我有这个代码 public class TestClass { companion object { public platformStatic var data: String? = null } } data字段最终通过另一个类的反射来填充。 我发现,如果我用TestClass.javaClass访问类,我得到的内部伴侣类只有访问该字段的方法。 通过javaClass<TestClass>()访问它javaClass<TestClass>()使我能够完全访问字段的预期Java类。 我只是错过了明显的东西? 是否有这种行为的原因?

我如何使用Kotlin中的默认构造函数参数值实例化一个对象?

我有数据类与默认值。 data class Project( val code: String, val name: String, val categories: List<String> = emptyList()) 当某些值为null时,Java反射无法实例化类。 我得到例外 java.lang.IllegalArgumentException: Parameter specified as non-null is null: method Project.<init>, parameter categories 这是因为java.lang.reflect.Constructor<T>.instantiateClass方法需要非空的参数。 我有类型信息,我有构造函数的定义,但我不知道如何调用构造函数,以便它使用默认值(值来自数据库和categories可以为null )。 Kotlin有没有办法达到这个目的?

Kotlin:泛型,反射和T和T之间的区别:任何

如果我尝试访问泛型类型的javaClass,则Kotlin编译器会抱怨T不是kotlin.Any的子类型 class Foo<T> (val t: T ){ val cls = t.javaClass // Error, T is not a subtype of kotlin.Any } 如果将T定义为子类型任何一切都可以。 class Bar<T:Any> (val t: T ){ val cls = t.javaClass // OK } Q1)如果输入“T”不是“任何”的子类型,哪个类/类可以是子类? Q2)对于T的所有实例是否存在一个javaClass,如果有,我该如何访问它?

Kotlin。 如何检查是否可以通过反射字段?

我正在开发一个代码生成器,在运行时从类中获取数据。 该发生器只能与Kotlin一起使用。 目前,我正面临着这个问题,因为我不知道如何检查该字段是否可以空。 所以主要问题是如何通过反射来实现这个检查?

以Java方法获取对Kotlin函数的引用

我有一个采用Method参数的Java方法: void doSomethingWithMethod(Method m) { … } 我有一个包含一个函数的Kotlin类: class MyClass { fun myFunction() : List<Something> { … } } 我可以使用MyClass::myFunction获得对该函数的引用,但是我没有看到将其传递到doSomethingWithMethod方法的方法。 是否有一个相当于.java属性,可以应用于Kotlin类的参考,以获得其Java相当于? 如果没有,是否有解决方法?

Kotlin检查参数的类型

当使用Java的反射,我可以做这样的事情: method.getParameterTypes()[i]给我参数的i类型( Class )。 如何使用Kotlin的KCallable来实现这KCallable ? 我试过做这样的事情: callable.parameters[i].type但我发现唯一的事情是type.javaType但它返回Type ,根本没有帮助我。 我也尝试过parameters[i].kind但是这根本没有帮助我。 如何使用Kotlin的KCallable来执行Java的method.getParameterTypes() ?

如何从kPalin中的KParameter获取类的引用?

下面的代码是关于反射。 它试图做2件事情: case1()从SimpleStudent类创建一个实例,它的工作原理。 case2()从Student类创建一个实例,不工作。 case2()不能正常工作的原因是在里面的generateValue() : 我不知道如何检查它是kotlin类型或我自己的类型(我有一个肮脏的方式来检查param.type.toString() not contain "kotlin"但我不知道是否有更好的解决方案 当它是一个自定义类时,我不知道如何获得它的类的引用。 问题是,即使param.type.toString() == "Lesson" ,当我试图得到param.type::class ,它是class kotlin.reflect.jvm.internal.KTypeImpl 那么,如何解决呢? 谢谢 ============== import kotlin.reflect.KParameter import kotlin.reflect.full.primaryConstructor import kotlin.test.assertEquals data class Lesson(val title:String, val length:Int) data class Student(val name:String, val major:Lesson ) data class SimpleStudent(val name:String, val age:Int ) fun generateValue(param:KParameter, originalValue:Map<*,*>):Any? { var value = originalValue[param.name] // […]