在 Kotlin 中,当声明获取某个类型的 KClass 时,例如 String::class(表示类型将为 String 的值),是否有语法来指示该值可以为空(即表示 String? 值而不是 String) .
上下文是我正在尝试使用 KotlinPoet 生成 Kotlin 类,但我创建的所有属性(使用 PropertySpec.builder)都不能为空(例如字符串,而我真正想要的是字符串?)。
谢谢你的帮助。
在 Kotlin 中,当声明获取某个类型的 KClass 时,例如 String::class(表示类型将为 String 的值),是否有语法来指示该值可以为空(即表示 String? 值而不是 String) .
上下文是我正在尝试使用 KotlinPoet 生成 Kotlin 类,但我创建的所有属性(使用 PropertySpec.builder)都不能为空(例如字符串,而我真正想要的是字符串?)。
谢谢你的帮助。
不,Kotlin 有Nullable 类型和 Non-Null 类型,但它没有 nullable classes和 non-null classes的概念。AKType
是分类器加上可空性,其中分类器可以是 a KClass
。
KotlinPoet 0.1.0没有办法表示可为空的类型,但在0.2.0中通过TypeName.asNullable
. 例如:
val type = TypeName.get(String::class).asNullable()
如果有人需要这个:从 KotlinPoet 0.3.0 开始,语法是:
PropertySpec.builder("myVar", String::class.asTypeName().asNullable()).mutable(true).initializer("%S", null)
生产 :
var myVar:String? = null
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 1.1.0:
Any::class.asTypeName().copy(nullable = true)