Tag: reflection

确定一个实例是否是一个数据类的一个实例

鉴于以下类别 abstract class SomeAbstractClass { abstract val name: String } data class DataClass( override val name: String ) : SomeAbstractClass() class NoDataClass( override val name: String ) : SomeAbstractClass() 对于SomeAbstractClass任何实例,我可以确定它是否是一个数据类而不依赖于types检查? 一些背景:这似乎是把inheritance和数据类结合起来的最好方式, 正如不同的答案中所建议的那样 。 现在,在SomeAbstractClass的初始化块中,我想抛出一个exception,以防派生types不是数据类,以确保派生types的“正确”(不可变)实现。

科特林。 如何检查是否可以通过reflection字段?

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

Kotlin:大量的ConsPStack,我该如何避免?

我如何避免由我的应用程序创建的大量ConsPStack ? 什么时候创建? 我的申请: https : //github.com/Jire/Abendigo

Kotlinreflection – 获取一个类的所有字段名称

我怎样才能得到一个Kotlin数据类的declaredFields它的declaredFields ? 像Java的getDeclaredFields() 如果这是可能的,是否也可以过滤public和private领域? (像Java的Modifier.isPrivate(field.getModifiers()) )

当不在JVM上运行时,如何获得对Kotlin KClass的引用?

定位Javascript和本地java.lang.Class.forName()不可用时。 我如何在这些环境中获得KClass ?

为什么SomeClass :: class是KClass ,但是这个:: class是KClass

我想打印我的类的属性的值。 fun print() { val cl = this::class cl.declaredMemberProperties.filter {it.visibility != KVisibility.PRIVATE}.forEach { println(“${it.name} = ${it.get(this)}”) } } 当我尝试构建此代码时,出现编译器错误: Error:(34, 40) Kotlin: Out-projected type ‘KProperty1’ prohibits the use of ‘public abstract fun get(receiver: T): R defined in kotlin.reflect.KProperty1’ 当我改变this类名SomeClass一切都很好 fun print() { val cl = SomeClass::class cl.declaredMemberProperties.filter {it.visibility != KVisibility.PRIVATE}.forEach { println(“${it.name} = ${it.get(this)}”) } […]

Kotlin编译器是否始终保留字节码中的参数名称?

在kotlin-reflect ,类KParameter具有可空name ,其KDoc表示: 该参数在源代码中声明的名称;如果参数没有名称或名称在运行时不可用,则为null 。 无名参数的例子包括用于成员函数的这个实例,用于扩展函数或属性的扩展接收器, 在没有调试信息的情况下编译的Java方法的参数 等等 。 它讲述了众所周知的事实,即Java并不总是在字节码中包含参数名称,但它没有提到Kotlin类,尽管还有其他一些类。 我能否假定Kotlin编译器保留为Kotlin源中的函数声明的参数名称? (特别是,我需要构造函数参数名称)。

科特林阶级平等失败

以下片段显示了从不同来源获得的Kotlin KClass参考的测试相等性的结果。 他们的字符串表示是相同的。 但是他们的java类是不同的。 预计c , c0和c1是相等的。 但由于某种原因,他们不是。 有一些细微差别,或者是一个错误? 如果这不是一个错误什么是可靠的方法来测试KClass es的平等? fun main(args: Array) { val c = Int::class fun test(v0: Any, v1: Any) { val c0 = v0.javaClass.kotlin val c1 = v1.javaClass.kotlin println(“c= $c; c0= $c0; c1= $c1”) // c= class kotlin.Int; c0= class kotlin.Int; c1= class kotlin.Int println(“c= ${c.java}; c0= ${c0.java}; c1= ${c1.java}”) […]

如何获得Kotlin的KType?

我正在尝试Kotlin中的reflectionfunction,但似乎无法理解如何获取KType值。 假设我有一个将短语映射到对象工厂的类。 在不明确的情况下,用户可以提供一个type参数,将搜索范围缩小到仅返回该types对象(或某个子types)的工厂。 fun mapToFactory(phrase: Phrase, type: KType = Any::class): Any {…} type需要接受几乎任何东西,包括Int ,这从我的经验似乎有点特别对待。 默认情况下,它应该是Any东西,这意味着“不排除任何工厂”。 如何分配默认值(或任何值)来type ?

我怎样才能得到一个Kotlin对象的名字?

如果我有顶级对象声明 package com.example object MyObject {} 如何将字符串com.example.MyObject转换为对MyObject的引用?