Conseguir captadores (o métodos o propiedades) en la lista de clase genérica con Kotlin

Leviand:

No puedo imaginar cómo debo hacer frente a los genéricos en Kotlin.

Estoy escribiendo una clase de historia para los cambios realizados en los objetos genéricos, que deben recibir cualquier tipo de clase como parámetro: después de eso, me gustaría comparar los viejos valores de los objetos con los nuevos valores de los objetos, y si he encontrado una diferencia, voy escribir que en mi clase de datos.

He succedeed hacer eso con Java con bean.getClass().getMethods();, pero quiero tratar de movimiento para Kotlin.

class ChangeHistoryUtils<T> (val originalBean : T, username : String , var modifiedBean: T? = null) {

    data class ChangeHistory(val username: String, val fieldName : String,
                    val oldValue : String , val newValue : String , val date : LocalDate = LocalDate.now())

    fun compareBeans(){
        //how to get all originalBean getters and its values?
    }
}

En realidad estoy atascado aquí: ¿cómo debe obtener todos los captadores en mi Tobjeto?

Vamos a supongo que voy a recibir una clase que con 10 captadores, quiero llamar a todos estos 10 captadores en originalBean, y comparando su valor con los que está en modifiedBean. Si es diferente, la escribiré en miChangeHistory

Gracias

Roland:

Usted necesita asegurarse de que Ten sí mismo no es un tipo anulable, es decir, algo así como el uso where T : Anyde la declaración de la clase, por ejemplo:

class ChangeHistoryUtils<T> (originalBean : T, username : String , modifiedBean: T? = null) where T : Any

Si lo hace después de que usted puede simplemente tener acceso a los métodos como lo hizo en Java, por ejemplo, si sólo desea volver a utilizar el código que ya tiene:

fun compareBeans(){
  originalBean::class.java.methods // this is actually your originalBean.getClass().getMethods() !
                   // just print the methods for now...
                            .forEach(::println)
}

Pero a medida que está utilizando Kotlin es posible que en lugar que desee utilizar el enfoque Kotlin entonces, por ejemplo, sólo mostrar las propiedades, o similar:

originalBean::class.memberProperties
             // again just printing them:
                       .forEach(::println)

A continuación, deberá añadir kotlin-reflectcomo dependencia. También es posible que desee comprobar la referencia Kotlin con respecto a la reflexión .

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=206034&siteId=1
Recomendado
Clasificación