如何确定类是数据?

时间:2019-10-10 06:14:08

标签: kotlin reflection

我的项目中有一个数据类。将此类始终保持为“数据”非常非常重要,并且他的所有属性也必须是数据类(或原语)。

是否可以通过编程方式找出项目中的某个类仍然是数据类,并且仅由数据类组成,而所有数据类均由数据类等组成??

1 个答案:

答案 0 :(得分:2)

您必须使用Kotlin Reflection。您可以检查KClass.isDataClass.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
}