[英]Kotlin: pass class type used in filterIsInstance in a function
我在 kotlin 中写了一个 function
private fun mapBasketToTeam(basketIter: GenericBasket) {
val fruitBasket = basketIter.basketTypeMap.getOrDefault(BasketType.FRUIT, listOf())
.filterIsInstance<FruitBasket>()
val groceryBasket = basketIter.basketTypeMap.getOrDefault(BasketType.GROCERY, listOf())
.filterIsInstance<GroceryBasket>()
}
现在我想通过创建一个新的 function 来简化它,它将 class 的类型作为GroceryBasket
或FruitBasket
并分别返回给我List<GroceryBasket>
或List<FruitBasket>
。 这样就不会在两行中重复相同的代码。
有没有办法将 class 类型传递给 function 然后可以传递给filterIsInstance
?
如果除了对这些项目进行排序之外,您没有将BasketType
枚举用于任何其他操作,则可以消除枚举并将 GenericBasket 中 map 的密钥类型更改为 KClass。 然后您可以像这样将 function 添加到您的 GenericBasket 中:
inline fun <reified T: Any> getBasketsOfType(): List<T> =
basketTypeMap[T::class].orEmpty().filterIsInstance<T>()
然后像这样使用它:
private fun mapBasketToTeam(basketIter: GenericBasket) {
val fruitBasket = basketIter.getBasketsOfType<FruitBasket>()
val groceryBasket = basketIter.getBasketsOfType<GroceryBasket>()
}
如果出于某种原因您需要保留枚举,我看不出如果没有不安全的强制转换,您将如何做到这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.