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

我怎么能懒惰初始化一个字段,并执行一个断言呢?

我试过了

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 }