草庐IT

Reflection

全部标签

reflection - 为什么 SomeClass::class 是 KClass<SomeClass> 但 this::class 是 KClass<out SomeClass>

我想打印我的类(class)的属性值。funprint(){valcl=this::classcl.declaredMemberProperties.filter{it.visibility!=KVisibility.PRIVATE}.forEach{println("${it.name}=${it.get(this)}")}}当我尝试构建此代码时,出现编译器错误:Error:(34,40)Kotlin:Out-projectedtype'KProperty1'prohibitstheuseof'publicabstractfunget(receiver:T):Rdefinedinko

java - 使用 Kotlin 通过反射调用类的构造函数

我有以下数据类dataclassPerson(valid:Int?=null,valname:String,valactive:Boolean)我需要通过反射调用它的构造函数。我尝试了以下代码privatefuncreateEntity(constructor:Constructor,varargargs:T):Any{returnconstructor.newInstance(args)}并使用args的数组调用它范围。valfields=entity.declaredFieldsvarelements=Array(getFieldsCount(fields),{i->valinde

java - 使用 Kotlin 通过反射调用类的构造函数

我有以下数据类dataclassPerson(valid:Int?=null,valname:String,valactive:Boolean)我需要通过反射调用它的构造函数。我尝试了以下代码privatefuncreateEntity(constructor:Constructor,varargargs:T):Any{returnconstructor.newInstance(args)}并使用args的数组调用它范围。valfields=entity.declaredFieldsvarelements=Array(getFieldsCount(fields),{i->valinde

java - 如何从 Java 中获取 Kotlin 属性的注释?

我有一个kotlin类,其属性具有Java注释,但我无法使用Java反射访问这些注释:classTestClass(@AvarmyProperty:String)以下测试打印null:publicclassTestKotlinField{@Retention(RetentionPolicy.RUNTIME)public@interfaceA{}@Testpublicvoidtest()throwsNoSuchFieldException{System.out.println(TestClass.class.getDeclaredField("myProperty").getAnnota

java - 如何从 Java 中获取 Kotlin 属性的注释?

我有一个kotlin类,其属性具有Java注释,但我无法使用Java反射访问这些注释:classTestClass(@AvarmyProperty:String)以下测试打印null:publicclassTestKotlinField{@Retention(RetentionPolicy.RUNTIME)public@interfaceA{}@Testpublicvoidtest()throwsNoSuchFieldException{System.out.println(TestClass.class.getDeclaredField("myProperty").getAnnota

java - Kotlin 反射 - 获取类的所有字段名称

如何获得一个Kotlin数据类的列表,它是declaredFields?像Java的getDeclaredFields()如果可以的话,是否也可以过滤public和private字段?(就像Java的Modifier.isPrivate(field.getModifiers())) 最佳答案 您可能想要的是获取类的属性,而不是字段。这可以按如下方式完成:MyClass::class.declaredMemberProperties也可以通过Java反射获取字段:MyClass::class.java.declaredFields但字

java - Kotlin 反射 - 获取类的所有字段名称

如何获得一个Kotlin数据类的列表,它是declaredFields?像Java的getDeclaredFields()如果可以的话,是否也可以过滤public和private字段?(就像Java的Modifier.isPrivate(field.getModifiers())) 最佳答案 您可能想要的是获取类的属性,而不是字段。这可以按如下方式完成:MyClass::class.declaredMemberProperties也可以通过Java反射获取字段:MyClass::class.java.declaredFields但字

java - Kotlin 。如何通过反射检查该字段是否可以为空?

我正在开发一个代码生成器,它在运行时从类中获取数据。此生成器设计为仅与Kotlin一起使用。目前,我遇到了这个问题,因为我不知道如何检查该字段是否可以为空。那么主要的问题是如何通过反射来实现这个检查? 最佳答案 您可以使用isMarkedNullable检查可空性.以下代码:classMyClass(valnullable:Long?,valnotNullable:MyClass)MyClass::class.declaredMemberProperties.forEach{println("Property$itisMarkedN

java - Kotlin 。如何通过反射检查该字段是否可以为空?

我正在开发一个代码生成器,它在运行时从类中获取数据。此生成器设计为仅与Kotlin一起使用。目前,我遇到了这个问题,因为我不知道如何检查该字段是否可以为空。那么主要的问题是如何通过反射来实现这个检查? 最佳答案 您可以使用isMarkedNullable检查可空性.以下代码:classMyClass(valnullable:Long?,valnotNullable:MyClass)MyClass::class.declaredMemberProperties.forEach{println("Property$itisMarkedN

generics - Kotlin:泛型、反射以及类型 T 和 T:Any 之间的区别

如果我尝试访问泛型类型T的javaClass,Kotlin编译器会提示T不是kotlin.Any的子类型classFoo(valt:T){valcls=t.javaClass//Error,Tisnotasubtypeofkotlin.Any}如果将T定义为Any的子类型,一切正常。classBar(valt:T){valcls=t.javaClass//OK}Q1)如果类型“T”不是“Any”的子类型,那么它可以是哪些类/类的子类型?Q2)T的所有实例是否都存在javaClass,如果存在,我该如何访问它? 最佳答案 默认gene