可空值的 KClass 参考

KClass reference for nullable values

在 Kotlin 中,当声明获取类型的 KClass 时,例如 String::class(表示类型为 String 的值),是否有语法指示该值可为空(即表示 String ? 值而不是字符串).

上下文是我正在尝试使用 KotlinPoet 生成 Kotlin 类 但我创建的所有属性(使用 PropertySpec.builder)都不能为空(例如字符串,当我真正想要的是字符串?)。

感谢您的帮助。

没有。 Kotlin 有 Nullable types and Non-Null Types but it does not have a concept of nullable classes and non-null classes. A KType is a classifier plus nullability where a classifier can be a KClass.

KotlinPoet 0.1.0 did not have a way to represent nullable types but support for such was added in 0.2.0 通过 TypeName.asNullable。例如:

val type = TypeName.get(String::class).asNullable()

KotlinPoet 0.2.0 刚刚发布,并通过 asNullable() 调用添加了对可空类型的支持。例如:

PropertySpec.builder("name", TypeName.get(String::class).asNullable()).build()

... 将创建:

val name: java.lang.String?

请注意,如发行说明所述,0.2.0 中的某些函数签名已从 (type, name) 顺序翻转为使用 (name, type) 顺序,所以升级中断时不要害怕你的代码。

万一有人需要这个:从 KotlinPoet 0.3.0 开始,语法是:

PropertySpec.builder("myVar", String::class.asTypeName().asNullable()).mutable(true).initializer("%S", null)

生产:

var myVar:String? = null

至于 KotlinPoet 1.1.0:

Any::class.asTypeName().copy(nullable = true)

https://github.com/square/kotlinpoet#nullable-types