Tag: 懒惰评价

是否可以懒惰地初始化一个属性并声明它?

我怎么能懒惰初始化一个字段,并执行一个断言呢? 我试过了 val table: Array<FormatInfo> by lazy { val t = arrayOf(…) assert(table.size == FORMAT_COUNT, { System.err.println("GLI error: format descriptor list doesn't match number of supported formats") }) t } 但它溢出了: java.lang.StackOverflowError at gli.GliKt$table$2.invoke(gli.kt:451) at gli.GliKt$table$2.invoke(gli.kt) at kotlin.SynchronizedLazyImpl.getValue(Lazy.kt:131) at gli.GliKt.getTable(gli.kt) at gli.GliKt$table$2.invoke(gli.kt:693) at gli.GliKt$table$2.invoke(gli.kt) at kotlin.SynchronizedLazyImpl.getValue(Lazy.kt:131) at gli.GliKt.getTable(gli.kt) at gli.GliKt$table$2.invoke(gli.kt:693)… 我该如何解决?

Kotlin,针对Java Interop:懒惰集合的习惯类型?

针对Java互操作性时,应该使用什么类型的懒惰集合? Sequence<T>对于Kotlin调用者来说是最有意义的,因为默认情况下扩展函数是惰性的,但是强制Java调用者处理Kotlin stdlib类型并手动转换序列迭代器(序列不能扩展迭代! Iterable<T>由于在for循环中隐式使用而对Java调用者有意义,但是会导致不知情的Kotlin调用者由于非惰性扩展函数而意外地放弃了懒惰 Stream<T>对于Java和Kotlin调用者来说都是最佳的,但是可能有开销,并且是Java 8+(Kotlin目标6+)