【发布时间】:2020-05-30 13:26:03
【问题描述】:
我正在尝试使用泛型将我的两个函数合二为一。
fun <T> List<T>.toElementOrSize1(keySelector: (T) -> String): String {
val key = keySelector(first())
return if (all { keySelector(it) == key }) key else "size = $size"
}
fun <T> List<T>.toElementOrSize2(keySelector: (T) -> String?): String? {
val key = keySelector(first())
return if (all { keySelector(it) == key }) key else "size = $size"
}
我可以这样写:
fun <T, K : String?> List<T>.toElementOrSize(keySelector: (T) -> K): K {
val key = keySelector(first())
return if (all { keySelector(it) == key }) {
key
} else {
"size = $size" as K
}
}
这可行,但我收到了未经检查的演员表警告。
为什么会发出此警告? 以及如何避免这个警告?
谢谢。
【问题讨论】:
-
你能描述一下你的函数应该做什么吗?
-
@IR42 我想如果我理解得很好,他想在 lambda 返回非空值时返回一个不可为空的字符串,在 lambda 返回可空值时返回一个可空字符串。
-
Tenfour04 的回答是正确的,你可以阅读这篇解释 Generic 的边界如何工作的文章:proandroiddev.com/…