首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查Delegates.notNull<Type>()声明的变量是否在Kotlin中初始化?

如何检查Delegates.notNull<Type>()声明的变量是否在Kotlin中初始化?
EN

Stack Overflow用户
提问于 2022-01-10 15:41:47
回答 1查看 188关注 0票数 1

我想以编程的方式检查我使用by Delegates.notNull()声明的变量是否在我的代码中声明过。

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2022-01-10 16:26:32

代码语言:javascript
复制
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 5
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70655063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档