在Kotlin中,当声明为类型获取KClass时,例如String :: class(表示类型为String的值),是否有一种语法来指示该值可以为空(即代表String?值而不是of String)。
上下文是我正在尝试使用KotlinPoet生成Kotlin类,但我创建的所有属性(使用PropertySpec.builder)都不可为空(例如String,当我真正想要的是String?)时。
感谢您的帮助。
答案 0 :(得分:7)
没有。 Kotlin有Nullable types and Non-Null Types但它没有可为空的类和非null 类的概念。 KType
是一个分类器加上可空性,其中分类器可以是KClass
。
KotlinPoet 0.1.0无法代表可空类型,但0.2.0通过TypeName.asNullable
添加了对此类支持。 e.g:
val type = TypeName.get(String::class).asNullable()
答案 1 :(得分:6)
如果有人需要这个:从KotlinPoet 0.3.0开始,语法为:
PropertySpec.builder("myVar", String::class.asTypeName().asNullable()).mutable(true).initializer("%S", null)
生产:
var myVar:String? = null
答案 2 :(得分:2)
KotlinPoet 0.2.0刚刚发布,并通过asNullable()
调用添加了对可空类型的支持。例如:
PropertySpec.builder("name", TypeName.get(String::class).asNullable()).build()
...将创建:
val name: java.lang.String?
请注意,正如发行说明所述,0.2.0中的某些功能签名已从(类型,名称)顺序翻转为使用(名称,类型)顺序,因此在升级时不要害怕破坏代码
答案 3 :(得分:1)
对于KotlinPoet 1.1.0:
Any::class.asTypeName().copy(nullable = true)