Kotlin 伴生對(duì)象(companion object)不能直接實(shí)現(xiàn)多態(tài)。在 Kotlin 中,多態(tài)是通過接口和抽象類實(shí)現(xiàn)的。然而,你可以使用擴(kuò)展函數(shù)(extension functions)來(lái)實(shí)現(xiàn)類似多態(tài)的功能。
擴(kuò)展函數(shù)允許你在不修改原始類的情況下,為類添加新的功能。這意味著你可以為不同的類編寫相同的擴(kuò)展函數(shù),從而實(shí)現(xiàn)類似多態(tài)的效果。這里有一個(gè)簡(jiǎn)單的例子:
fun <T> List<T>.printElements() {
for (element in this) {
println(element)
}
}
data class Person(val name: String, val age: Int)
data class Animal(val name: String, val species: String)
fun main() {
val people = listOf(Person("Alice", 30), Person("Bob", 25))
val animals = listOf(Animal("Buddy", "Dog"), Animal("Charlie", "Cat"))
people.printElements()
animals.printElements()
}
在這個(gè)例子中,我們定義了一個(gè)名為 printElements
的擴(kuò)展函數(shù),它接受一個(gè)泛型列表作為參數(shù)。我們可以為任何類型的列表調(diào)用這個(gè)函數(shù),就像它們是多態(tài)的一樣。這里,我們?yōu)?List<Person>
和 List<Animal>
類型分別調(diào)用了 printElements
函數(shù)。