Android 在Kotlin中,在泛型函数中强制转换或使用多个约束边界的替代方法是什么?
我有三个数据类,我想创建一个通用函数来映射它们:Android 在Kotlin中,在泛型函数中强制转换或使用多个约束边界的替代方法是什么?,android,kotlin,generics,Android,Kotlin,Generics,我有三个数据类,我想创建一个通用函数来映射它们: data class Visits( val present: List<Present>, val past: List<Past> ) data class Present{ val field1: String, val field2: String } data class Past{ val field1: String, val field2: String
data class Visits(
val present: List<Present>,
val past: List<Past>
)
data class Present{
val field1: String,
val field2: String
}
data class Past{
val field1: String,
val field2: String
}
数据类访问(
出席:名单,
val过去:列表
)
存在数据类{
val字段1:字符串,
val字段2:字符串
}
数据类过去{
val字段1:字符串,
val字段2:字符串
}
我尝试过的泛型函数如下
private fun doSomething(visits: Visits, position: Int) {
when (position) {
0 -> setItems(visits.present)
1 -> setItems(visits.past)
...
}
}
private fun <T> setItems(visits: List<T>): ArrayList<Something> {
val items: ArrayList<Something> = arrayListOf()
visits.forEach { i ->
items.add(
Something(
i.field1,
i.field2
)
)
}
return items
}
inline fun <reified T> doSomethingWithType(list: List<T>) {
// do something with visits list, which can be List<Present> or List<Past>
}
private fun doSomething(访问:访问,位置:Int){
何时(职位){
0->setItems(visions.present)
1->设置项目(访问次数、过去)
...
}
}
私人娱乐设置项(访问:列表):ArrayList{
val项:ArrayList=arrayListOf()
visions.forEach{i->
items.add(
某物(
i、 字段1,
i、 字段2
)
)
}
退货项目
}
总的来说,这就是代码,我试着使用
private fun doSomething(visits: Visits, position: Int) {
when (position) {
0 -> setItems(visits.present)
1 -> setItems(visits.past)
...
}
}
private fun <T> setItems(visits: List<T>): ArrayList<Something> {
val items: ArrayList<Something> = arrayListOf()
visits.forEach { i ->
items.add(
Something(
i.field1,
i.field2
)
)
}
return items
}
inline fun <reified T> doSomethingWithType(list: List<T>) {
// do something with visits list, which can be List<Present> or List<Past>
}
inline fun doSomethingWithType(列表:列表){
//使用访问列表做一些事情,可以是列表或列表
}
我希望避免setItems函数的代码重复,例如setItemsPresent和setItemsPast。我建议用接口解决这个问题
interface Item {
val field1: String
val field2: String
}
data class Present(
override val field1: String,
override val field2: String
) : Item
data class Past(
override val field1: String,
override val field2: String
) : Item
然后,您的子片段可以获取一个类型为list
的列表,无论它们是当前的还是过去的数据对象
因此,泛型映射函数没有太多意义,但是您知道,您需要的是通过泛型约束获得有关泛型的更多信息
data class Something(
val field1: String,
val field2: String
)
fun <T : Item> mapToSomething(visits: List<T>): List<Something> {
return visits.map { Something(it.field1, it.field2) }
}
数据类(
val字段1:字符串,
val字段2:字符串
)
趣味地图内容(访问:列表):列表{
回访.map{Something(it.field1,it.field2)}
}
我不太明白你想做什么。你想把现在和过去映射到什么?什么东西?您可能想利用标准的kotlin list.map{}扩展函数,可能会使问题变得更简单。场景是,访问是一个api响应对象,ideia是将列表中的那些值(现在、过去)映射到不同的选项卡。我所说的是一个用于数据绑定的数据类。因此,更具体地说,有一个带有TabLayout和ViewPager2的父片段。我打算为tabitems重用一个片段,因此我使用一个viewmodel并将位置传递给子片段,一个片段将包含列表项,另一个片段包含列表项。我知道还有其他的方法,但我正在尝试使用泛型并制作一种可重用的组件。