可为空值的KClass参考

时间:2017-05-18 16:12:20

标签: kotlin kotlinpoet

在Kotlin中,当声明为类型获取KClass时,例如String :: class(表示类型为String的值),是否有一种语法来指示该值可以为空(即代表String?值而不是of String)。

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

感谢您的帮助。

4 个答案:

答案 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)

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