This answer says that Object types use the null value on lateinits of Object type。有人可以详细说明吗? “使用空值”是什么意思?
此外,它说“对于原始类型,没有这样的值”-为什么没有
答案 0 :(得分:5)
在JVM(过去是Kotlin首次使用的平台)上,primitive types与类或对象类型之间存在区别。
它们具有不同的运行时表示形式:基本值直接存储在字段中,该字段只能保存相应的基本类型值之一(例如,#!/bin/bash
set -x
go build ./cmd/...
cd plugins
for DIR in `find . ! -path . -type d`
do
go build -buildmode=plugin $DIR/*.go
done
仅true
和false
),并且没有缺失值的特殊表示形式。相比之下,类类型的字段将间接 reference 存储到在堆中分配的实例的间接 reference ,并且类类型的字段可以保存不包含的特殊boolean
引用指向任何实例。
Kotlin null
属性被编译为单个字段,并且它们在内部使用lateinit
值指示该属性尚未初始化。由于原始类型的JVM字段不能具有null
值,因此Kotlin不允许使用通常为mapped to Java primitives类型的null
属性,因为这将需要不同的表示形式,并且没有另一个答案说,存在可接受的解决方案。
相反,您可以使用by Delegates.notNull()
来实现与映射类型相似的行为。