我有一个泛型类型 ( T: Any?),我需要在一种情况下限制它null:
class Repository<T> { // T may be a non-null or nullable type.
fun getFromFoo(): T {}
fun getFromBar(): T {} // This is never null. Can I mark it as so?
}
val repository = Repository<String>()
val fromFoo: String = repository.getFromFoo() // Returns a non-null String.
val fromBar: String = repository.getFromBar() // How do I make this work?
val repository = Repository<String?>()
val fromFoo: String? = repository.getFromFoo() // Returns a nullable String.
val fromBar: String = repository.getFromBar() // How do I make this return a non-null String?
Run Code Online (Sandbox Code Playgroud)
虽然理想情况下我会将它们重构为单独的类型(例如FooRepository和BarRepository),但有没有办法获得这种类型约束功能?
您需要的是 \xe2\x80\x94 类型,它是 generic和T & Any的交集。它表示永远不能包含空值的子类型。TAnyT
不幸的是,交集类型,特别是这个交集目前在 Kotlin 中是不可表示的,这意味着您不能将函数的返回类型声明为 的不可空子类型T。