我的项目中有一个数据类。将此类始终保持为“数据”非常非常重要,并且他的所有属性也必须是数据类(或原语)。
是否可以通过编程方式找出项目中的某个类仍然是数据类,并且仅由数据类组成,而所有数据类均由数据类等组成??
答案 0 :(得分:2)
您必须使用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
}