jeudi 23 mars 2017

Kotlin Reflection - Set property

I want to inject certain values onto the fields of my target that are annotated with a specific annotation.

I find these fields, I categorize them correctly but when I try to set them I get object is not an instance of declaring class.

When I call my method I already know that the given field is instance of a subtype of Component.
My code is this:

@Suppress("UNCHECKED_CAST")
private fun injectComponent(field: KProperty<*>) {
    val componentType = field.returnType.jvmErasure as KClass<Component> 
    val value = owner.getComponent(componentType) ?: throw InjectionTargetNotFoundException(componentType)

    field.isAccessible = true
    field.call(value)
}

Also it is quite ugly to have that @Suppress("UNCHECKED_CAST"). I just need it because owner.getComponent() expects a KClass<T : Component>.
And it returns the result I expect it to return.





Aucun commentaire:

Enregistrer un commentaire