Kotlin: функция с общим классом параметров - PullRequest
0 голосов
/ 04 октября 2018

как создать функцию, которая получает в параметре любой тип класса?

Я хочу напечатать поля класса, переданные в параметрах, и их значения. Вот мой тест кода, но он не работает:

fun saveInPreference(klass: Any) {
    for (prop in klass::class.memberProperties) {
        println("${prop.name}") //Print field name of the class
        println("${prop.name} = ${prop.get(prop.name)}") // Error not work, not get value of fields
    }

}

спасибо

1 Ответ

0 голосов
/ 04 октября 2018

Хорошо, API, который вы используете, немного более безопасен для типов, чем требуется в вашем случае использования.Фактически, тип prop, который вы получаете от memberProperties, является out -проектированным типом, поэтому вы не можете просто передать экземпляр типа, из которого он был получен, без захвата типа.См. этот вопрос и ответ для объяснения.

Что касается вашего варианта использования, достаточно использовать менее безопасный тип API, call(obj) вместо get(obj):

for (prop in klass::class.memberProperties) {
    /* ... */
    println("${prop.name} = ${prop.call(prop.name)}") 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...