代码之家  ›  专栏  ›  技术社区  ›  Ahmed Hegazy

扩展函数内部的不可变val空检查

  •  2
  • Ahmed Hegazy  · 技术社区  · 6 年前

    当我有一个不可变的val选项时,编译器跟踪我对空执行的检查的信息,并且可以将变量视为非空,并直接在if条件内调用它。

    val s: String? = "test"
    
    if (s != null) {
       s.startsWith("3") // This works
    }
    
    if (!s.isNullOrEmpty()) {
        s.startsWith("3") // Not working
    }
    

    是否可以签入扩展函数并让编译器知道它?

    1 回复  |  直到 6 年前
        1
  •  4
  •   Henning    6 年前

    这在科特林还没有。

    JetBrains目前开发了一个叫做“合同”的功能( https://discuss.kotlinlang.org/t/status-of-kotlin-internal-contracts/6392 )这和他们所做的很相似 their own @Contract annotation 对于Java代码,但将得到编译器的支持。

    不过,它还处于早期阶段,还没有发布日期。