我想以编程的方式检查我使用by Delegates.notNull()声明的变量是否在我的代码中声明过。
val max = arr.maxOrNull()
var num by Delegates.notNull<Int>()
if (max != null) {
if(max >= 0){
for(i in 1..max){
if (!arr.contains(i)){
num = i
break
}
}
if(!(this::num.isInitialized)) num = max + 1 //TODO: How do I check if num variable has been initialized
}
}
return num我尝试过使用class::num.isInitialized方法,但是我创建的方法不是在类中,它只是一个算法的解决方案。我还尝试为解决方案创建一个类,并使num变量成为字段变量;这样我就可以在类中访问它,this上下文也可以工作。但是,class::num.isInitialized似乎只用于lateinit variables,而我不能使用lateinit var num: Int,因为您不能对原始数据类型使用lateinit。
发布于 2022-01-10 16:26:32
import kotlin.properties.Delegates
object Test {
private var num by Delegates.notNull<Int>()
fun test(arr: Array<Int>): Int {
val min = 1
val max = arr.maxOrNull() ?: min
for (i in min..max) {
if (i !in arr) {
num = i
break
} else if (i == max) {
num = max + 1
}
}
return num
}
}
private val arr1 = arrayOf<Int>()
private val arr2 = arrayOf(5, 44, 3, 975, 1, 123, 2, 4)
private val arr3 = arrayOf(1, 4, 3, 2)
println(Test.test(arr1)) // Prints 1
println(Test.test(arr2)) // Prints 6
println(Test.test(arr3)) // Prints 5https://stackoverflow.com/questions/70655063
复制相似问题