是否可以懒惰地初始化一个属性并声明它?
我怎么能懒惰初始化一个字段,并执行一个断言呢?
我试过了
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)...
我该如何解决?
堆栈跟踪看起来像是从lazy {}
lambda中调用属性,这显然会使其变暗。
这应该工作:
val table: Array<FormatInfo> by lazy { val t = arrayOf(...) myAssert(t) t }