Tag: 反射

kotlin反射获取字段的列表

有没有一个等效的java反射foo.getClass().getFields() in Kotlin? 我只能发现,当我知道它的名字时,我可以访问一个字段,但是我想以通用的方式处理字段。

如何通过kotlin中的反射来获取参数名称?

java8有“-parameters”参数,传给编译器,kotlin呢? 正如我所看到的,kotlin编译器添加@参数名称的param参数注解@JetValueParameter,但一个是depricated ..

kotlin反射检查可空类型

我怎样才能测试一个KType变量是否包含一个可为空的kotlin类型的值(eG Int?)? 我有 var type: KType 来自KProperty<*>.returnType变量,我需要检测它是否等于某些kotlin类型(Int,Long等)。 这适用于: when (type) { Int::class.defaultType -> … Long::class.defaultType -> … else -> … } 但是这只适用于不可为空的类型,所以第一个分支不匹配Int? 然而,我还没有弄清楚,我可以检测到类型是Int? 其他则显而易见,但不是那么好 type.toString().equals("kotlin.Int?")

Kotlin总是空的Field Annotation

我有以下Kotlin注释 @Target(AnnotationTarget.FIELD, AnnotationTarget.PROPERTY_GETTER) @Retention(AnnotationRetention.RUNTIME) annotation class Field(val value: String) 和下面的测试代码 class TestObject(@field:Field("id") val id: Long) { @field:Field("string") val string = "Hello world" @get:Field("prop") val prop get() = string } class AnnotationTest { @Test fun test() { val obj = TestObject(200L) for (member in obj::class.declaredMemberProperties) { if (member.findAnnotation<Field>() != null) { println(member) } println(member) println(member.annotations) } […]

Kotlin:双冒号(反射)运算符结束

所以我正在与VertX Web合作,试图让它与Kotlin合作。 有一个路由器,你不得不说 val vertx = Vertx.vertx() val server = vertx.createHttpServer() val router = Router.router(vertx) server.requestHandler(router::accept) 但它不起作用。 我究竟做错了什么? 当我在Kotlin定义的类上使用它时,它表现正常。 是故意的吗? 无论如何,我必须像这样手动完成 server.requestHandler{router.accept(it)}

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

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

Kotlin反射地调用getter / setter

初学者在Kotlin这里。 我尝试通过在程序中反射来创建和填充对象。 我无法在纯kotlin中找到等价的功能,所以我的解决方案类似于下面的代码,它的工作正常,但需要使用像java.lang.String::class.java这样的dirty参考,可以理解,似乎不喜欢这个。 有没有更简单的方法,我失踪要做到这一点? val jclass = myObject::class.java val setters = jclass.declaredMethods.filter { it.name.startsWith("set") } for (s in setters) { val paramType = s.parameterTypes.first() val data = when(paramType) { java.lang.Integer::class.java -> foo java.lang.Double::class.java -> bar java.lang.String::class.java -> baz } s.invoke(myObject, data) }

Kotlin反射问题

我有这些方法在Java库中声明: Engine.java: public <T extends EntitySystem> T getSystem(Class<T> systemType) Entity.java: public <T extends Component> T getComponent(Class<T> componentClass) 现在,我使用这些方法很多,我真的很喜欢到处使用MyComponent::class (即kotlin反射)而不是更详细的javaClass<MyComponent>() 。 我的EntitySystem和Component实现是用Kotlin编写的。 所以我想我会创建带KClasses扩展函数,但我不太清楚如何使它们工作。 东西沿线… public fun <C : Component> Entity.getComponent(type: KClass<out Component>): C { return getComponent(type.javaClass) } 但是这不起作用有几个原因:编译器说类型推断失败,因为javaClass返回Class<KClass<C>> 。 而我需要Class<C> 。 我也不知道如何使方法正确通用。 任何人都可以帮我创建这些方法吗?

Kotlin反射操作符得到实现

我正在学习Kotlin,目前使用的是Fedora 25 OpenJDK 8和Kotlin 1.1。 我复制了Kotlin网站的示例: https : //kotlinlang.org/docs/reference/delegated-properties.html并更改了get运算符。 class Example { var p: String by Delegate() } class Delegate { operator fun getValue(thisRef: Any?, property: KProperty<*>): String { // My implementation return property.getter.call(thisRef) as String } operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String) { println("$value has been assigned to '${property.name} in $thisRef.'") } […]

有没有办法从一个普通的Kotlin类中识别一个Kotlin数据类?

有没有办法从一个普通的Kotlin类中识别一个Kotlin数据类? 像使用反射也许?