在Kotlin中,有没有一种方法可以定义不可为空的泛型参数,它是可为空类型的子类型?
我以为我可以做类似的事情
class nullableToNonnullable<A: Any?, B> where B: A, B: Any {
fun toNonNull(a: A): B
}
但是我遇到了编译时错误:
如果类型参数受另一个类型参数的限制,则不能有任何其他限制
现在,我只能使用包装器类型来解决它,例如
Option
class nullableToNonnullable<A: Any> {
fun toNonNull(a: Option<A>): A
}
最佳答案
我不知道你到底想做什么
(可空A)->(非空A)功能
class nullableToNonnullable<A: Any> {
fun toNonNull(a: A?): A
}
(可为空的A)->(不是A的空子类型)函数
class nullableToNonnullable<A: Any, B : A> {
fun toNonNull(a: A?): B
}
在这里,尽管函数可以输入可为空的参数,但类中的类型参数
A
不应为null。我不认为您可以将类类型参数之一限制为可为空(必须不为null),并且其中之一必须既是前者的子类型又不能在Kotlin中为null。
而且我认为您的示例中不需要案例类。
fun <A : Any> toNonNull(a: A?): A
和
fun <A : Any, B : A> toNonNull(a: A?): B