kotlin – 平台types/方法的非null标记
我经常使用UUID.randomUUID()
。 由kotlin推断的types是UUID!
。 有没有什么办法告诉kotlin这种特定方法的返回types是UUID
,并且始终为非null? 或者我必须做到处都UUID.randomUUID()!!
或者实施我自己的方法?
如果你显式声明了types,它应该声明它们是不可空的而不是平台types。
val id1 = UUID.randomUUID() // UUID! val id2: UUID = UUID.randomUUID() // UUID
我用一个函数来做这件事情,使事情变得更容易。 通过声明返回types,它具有相同的效果:
fun generateUUID(): UUID = UUID.randomUUID()
或作为延伸:
fun UUID.next(): UUID = UUID.randomUUID()
Kotlin不会强迫你使用!!
在平台types上。 如果Java函数的返回值没有可为空注释@NotNull
或@Nullable
,则可以将其视为可为空或非空:
val uuid1: UUID = UUID.randomUUID() val uuid2: UUID? = UUID.randomUUID()
如果您将它视为非nulltypes,但实际上为null,则将引发exception。
Kotlin的文档 :
如果我们选择一个非nulltypes,编译器将在赋值时发出一个断言。 这可以防止Kotlin的非nullvariables持有空值。 当我们将平台值传递给Kotlin函数,期望非空值等时,也会发出断言。总的来说,编译器会尽最大努力防止空值在程序中传播(尽管有时这是不可能完全消除的,因为generics)。