Как выяснить, что класс это данные? - PullRequest
0 голосов
/ 10 октября 2019

У меня есть класс данных в моем проекте. Очень и очень важно всегда сохранять этот класс как «данные», и все его свойства должны быть тоже классами данных (или примитивами).

Есть ли способ программно выяснить, что некоторый класс в проекте все еще является данными-класс и состоит только из классов данных, которые все состоят из классов данных и т. д.?

1 Ответ

2 голосов
/ 10 октября 2019

Вы должны использовать Kotlin Reflection . Вы можете проверить KClass.isData и Class.isPrimitive методы. Это будет что-то вроде этого:

fun isSafe(kClass: KClass<*>): Boolean {
    if (!(kClass.isData || kClass.java.isPrimitive)) {
        return false
    }

    for (property in kClass.memberProperties) {
        val field = property.javaField ?: continue
        if (!isSafe(field.type.kotlin)) {
            return false
        }
    }

    return true
}

class Test1

data class Test2(val v: Int, private val t: Test3)

data class Test3(val v: Int, private val t: Int)

data class Test4(val t: Test1)

fun main() {
    println(isSafe(Test2::class)) // print true
    println(isSafe(Test4::class)) // print false
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...