作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想了解in
和 out
在 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>) {}
现在它起作用了!
关于generics - 当作为参数传递时,in/out 在 Kotlin 中实际上做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55677861/
我正在使用 Jackson 序列化实现 Map 的自定义类。但在幕后,它实际上是一个 Map (此类代表 HTTP 请求参数),我希望 Jackson 将其序列化,就好像它是 Map 一样。 。我原以
这个问题在这里已经有了答案: Where and why do I have to put the "template" and "typename" keywords? (8 个答案) 关闭 8
我最近遇到了一些渐近符号,当这个问题出现时,它是 50 n logn 并且根据流行的规则获得 Big-OH 符号是简单地删除常数和低阶项。但是 50n logn 也是n^5 的 BIG-OH。那么
我是一名优秀的程序员,十分优秀!