我想要一个通用方法(或类),其行为如下:
val instanceS = MyCoolClass<String?>()
instanceS.someMethod("some not null string") //compiles
instanceS.someMethod(null) //doesn´t compile
val instanceS2 = MyCoolClass<String>()
//Exactly the same
instanceS2.someMethod("some not null string") //compiles
instanceS2.someMethod(null) //doesn´t compile
正如我可以将泛型类型(已经可以为空)标记为可为空,如下所示:
fun <T> doSomething():T? = ...
没有东西可以将类型(已经可以为不可为空)标记为不可为空吗?
fun <T> doSomething():T! = ... //this is not valid syntax
最佳答案
绝对非空类型用 T & Any
表示。此类型是 T
的不可空版本如果T
恰好表示可为 null 的类型。
fun <T> doSomething(someInput: T, someNonNullDefault: T & Any): T & Any {
return someInput ?: someNonNullDefault
}
这个例子当然可以这样实现:
fun <T: Any> doSomething(someInput: T?, someNonNullDefault: T): T {
return someInput ?: someNonNullDefault
}
但是如果<T>
范围仅限于类,而不是您想要的示例代码中的函数,那么此功能有更多用处。
此功能需要 Kotlin 1.7.0 或更高版本。
关于kotlin - 如何将类型标记为非空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75684939/