5

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

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

谢谢你的帮助。

4

4 回答 4

8

不,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()
于 2017-05-18T18:41:09.220 回答
6

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

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

生产 :

var myVar:String? = null
于 2017-06-22T07:41:11.900 回答
2

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) 顺序,因此当升级会破坏您的代码时不要害怕。

于 2017-05-21T16:13:21.250 回答
1

至于 KotlinPoet 1.1.0:

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

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

于 2019-03-25T19:04:02.293 回答