【发布时间】:2021-06-11 06:34:03
【问题描述】:
我读过Why doesn't Kotlin allow to use lateinit with primitive types?。
不过,使用lateinit有一个好处,就是如果错误是没有初始化导致的,可以从错误信息中立即知道。但是对于不能使用lateinit的基元类型,比如Int,用户必须赋值0。但是如果合适的值应该是一个远大于0的值,必须稍后确定,然后,用户忘记初始化值,程序稍后产生错误,有什么办法让看到错误信息的用户立即意识到错误不是由其他原因引起的?
非常感谢。
而lateinit var v:Int? = null很糟糕,这使得v--这样的操作变得非常复杂。
【问题讨论】:
-
"使
v--之类的操作变得非常复杂。"不,它没有。只需执行v!!.dec(),如果您尝试访问未初始化的属性,就会得到一个异常(就像您对lateinit执行的操作一样,但不是同一个异常)。 -
@Sweeper 感谢您的回答,但似乎
--不等于.dec()。 pl.kotl.in/QOwpjZCpt -
引用类型对于“未设置”有一个非常明显且明确的值:null。对于原语来说,情况并非如此。 (零很可能是一个有效值。可能是-1,或-9999,甚至是MIN_VALUE,或MAX_VALUE......那么其他原始类型呢?占位符字符是什么?还是布尔值?无论你选择哪个值,有人在某些时候会需要它。或者你有一个特定于实例的占位符,这比包装器还要复杂。)
标签: kotlin