gpt4 book ai didi

generics - 在函数参数中接受不同种类的ArrayList

转载 作者:行者123 更新时间:2023-12-02 13:03:36 25 4
gpt4 key购买 nike

我想要一个可以接受不同类型的ArrayList并对其进行一些操作的函数。例如,我要打印数组的所有元素。我已经试过了:

val numbers by lazy {ArrayList<Int>(0)}
val texts by lazy {ArrayList<String>(0)}

fun main() {
numbers.add(1)
numbers.add(2)
numbers.add(3)
texts.add("one")
texts.add("two")
texts.add("three")
printAll(numbers) //error here
printAll(texts) //error here
}

fun printAll(values: ArrayList<Any>){
values.forEach{item ->
println(item)
}
}

但是我得到这个错误:
Type mismatch: inferred type is kotlin.collections.ArrayList<Int> /* = java.util.ArrayList<Int> */ but kotlin.collections.ArrayList<Any> /* = java.util.ArrayList<Any> */ was expected
Type mismatch: inferred type is kotlin.collections.ArrayList<String> /* = java.util.ArrayList<String> */ but kotlin.collections.ArrayList<Any> /* = java.util.ArrayList<Any> */ was expected

这是我想要做的简化版本。在我的实际实现中,从另一个回调函数接收了参数 values,我需要对元素进行更复杂的处理,而不仅仅是打印。

我应该在函数参数中尝试什么?谢谢。

最佳答案

您可以使用Generic Functions。在您的示例中,只需将函数更改为:

fun <T> printAll(values: ArrayList<T>) {...}

并且kotlin编译器会将T更改为任何类型,您将使用。您应该阅读有关泛型的知识-它在面向对象的编程中非常有用。

现在,您可以使用与以前完全相同的方法,因为编译器将为您确定T的类型。

关于generics - 在函数参数中接受不同种类的ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58288034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com