提问人:Wesley Cramer 提问时间:10/28/2023 更新时间:10/28/2023 访问量:56
在 Kotlin 中,我如何实现一个元素列表,每个元素都属于使用泛型定义的同一个超类
In Kotlin how do I implement a list of elements which each belong to the same super class defined using generics
问:
我有几个密切相关的类,它们都派生自同一个超类。
open class Fruit() {}
class Apple() : Fruit() {}
class Orange() : Fruit() {}
我需要对这些类的列表执行某些操作。它们是相同的操作,但需要以不同的方式实现。因此,一种解决方案是使用泛型
abstract class <F>FilledBowl() {
abstract var fruits: MutableList<F>
abstract fun makeJuice(fruit: <F>)
}
class AppleFilledBowl() : <Apple>FilledBowl() {
override var fruits = mutableListOf()
override fun makeJuice(fruit: Apple) {
//some implementation
}
}
class OrangeFilledBowl() : <Orange>FilledBowl() {
override var fruits = mutableListOf()
override fun makeJuice(fruit: Orange) {
//some implementation
}
}
目前为止,一切都好。现在,我想要一个函数,该函数对这些类的列表执行某些操作。我什至无法宣布这一点。
fun process(bowls: MutableListOf<FilledBowl>) {
for(bowl in bowls) makeJuice(bowl)
}
我知道这不起作用,因为 FilledBowl 是抽象的,但我认为它需要,因为我使用的是泛型?我试图在没有这样的泛型的情况下做到这一点
abstract class FilledBowl() {
abstract var fruits: MutableList<Fruit>
abstract fun makeJuice(fruit: Fruit)
}
class AppleFilledBowl() : FilledBowl() {
override var fruits: MutableList<Apple> = mutableListOf()
override fun makeJuice(fruit: Apple) {
//some implementation
}
}
class OrangeFilledBowl() : FilledBowl() {
override var fruits: MutableList<Orange> = mutableListOf()
override fun makeJuice(fruit: Orange) {
//some implementation
}
}
但在这种情况下,苹果和橙子不被视为水果。我有一种感觉,应该有一种方法可以使用关键字来做到这一点,但我没有找到它。
答: 暂无答案
评论