gpt4 book ai didi

generics - 当作为参数传递时,in/out 在 Kotlin 中实际上做了什么?

转载 作者:行者123 更新时间:2023-12-04 11:37:24 25 4
gpt4 key购买 nike

我想了解inout在 Kotlin 。正如我发现的理论是,消费者 in拍摄和制作人 out返回。
但是当in时,以下两种方法如何区分?和 out被视为我们可以访问的方法参数 list没有任何问题?

private fun exampleMethod1(list: ArrayList<out String>) {}

private fun exampleMethod2(list: ArrayList<in String>) {}

最佳答案

让我演示一下 in/out借助一个例子来做。考虑以下:

private fun foo(list: ArrayList<Number>) {}

private fun bar(list: ArrayList<Number>) {}
现在我们尝试传递一个 ArrayList到每个函数,每个函数都有不同的泛型类型参数:
// Error: Type Mismatch. Required `ArrayList<Number>` Found `ArrayList<Int>`
foo(arrayListOf<Int>())

// Error: Type Mismatch. Required `ArrayList<Number>` Found `ArrayList<Any>`
bar(arrayListOf<Any>())
但是我们得到了错误!我们如何解决这个问题?我们必须以某种方式告诉编译器,对于 foo该列表还可以包含 Number 子类型的元素(例如 Int )和 bar我们必须告诉编译器该列表还可以包含基类型为 Number 的元素。 (例如 Any )。
private fun foo(list: ArrayList<out Number>) {}

private fun bar(list: ArrayList<in Number>) {}
现在它起作用了!
Further reading

关于generics - 当作为参数传递时,in/out 在 Kotlin 中实际上做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55677861/

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