我经常使用UUID.randomUUID()
. kotlin 推断的类型是UUID!
. 有没有办法告诉 kotlin 这个特定方法的返回类型是UUID
并且总是非空的?还是我必须到处做UUID.randomUUID()!!
或实施我自己的方法?
问问题
1065 次
2 回答
3
如果显式声明类型,则应将它们声明为不可为空而不是平台类型。
val id1 = UUID.randomUUID() // UUID!
val id2: UUID = UUID.randomUUID() // UUID
我这样做是为了让事情变得更容易一些。通过声明返回类型,它具有相同的效果:
fun generateUUID(): UUID = UUID.randomUUID()
或作为扩展:
fun UUID.next(): UUID = UUID.randomUUID()
于 2018-01-19T13:52:38.353 回答
2
Kotlin 不会强迫您!!
在平台类型上使用。如果 Java 函数的返回值没有可空性注释@NotNull
或@Nullable
,则可以将其视为可空或非空:
val uuid1: UUID = UUID.randomUUID()
val uuid2: UUID? = UUID.randomUUID()
如果将其视为非空类型但实际上为空,则会引发异常。
Kotlin 的文档:
如果我们选择非空类型,编译器将在赋值时发出断言。这可以防止 Kotlin 的非空变量持有空值。当我们将平台值传递给期望非空值等的 Kotlin 函数时,也会发出断言。总体而言,编译器会尽力防止空值在程序中传播很远(尽管有时这不可能完全消除,因为泛型)。
于 2018-01-19T13:51:58.470 回答