在 Kotlin 中,我如何实现一个元素列表,每个元素都属于使用泛型定义的同一个超类

In Kotlin how do I implement a list of elements which each belong to the same super class defined using generics

提问人:Wesley Cramer 提问时间:10/28/2023 更新时间:10/28/2023 访问量:56

问:

我有几个密切相关的类,它们都派生自同一个超类。

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
    }
}

但在这种情况下,苹果和橙子不被视为水果。我有一种感觉,应该有一种方法可以使用关键字来做到这一点,但我没有找到它。

列出 Kotlin 泛型继承 套列表

评论


答: 暂无答案