Kotlin中关键字out的含义及其与泛型的使用方法
你好!我开始在Java之后学习Kotlin,遇到了一个我不理解的结构。在Java中,我习惯了使用像`? extends T`和`? super T`这样的通配符泛型。但在Kotlin中,我在类声明中直接看到了`in`和`out`关键字。
例如,我遇到了这样的代码:
```kotlin
interface Source {
fun get(): T
}
```
`out`在`T`前面是什么意思?我尝试写了一个没有`out`的类:
```kotlin
class Box(private val item: T) {
fun get(): T = item
fun set(newItem: T) { /* ... */ }
}
```
它运行正常。但如果我添加`out`,编译器就会对`set`方法报错。为什么?而且`out`到底有什么用?在什么情况下应该使用它?这与Java中的PECS原则(Producer Extends, Consumer Super)有什么关系?请用简单的例子解释一下,让我理解何时以及为什么在Kotlin中使用`out`。
<<>>
Kotlin中的out是什么:声明处型变(declaration-site variance)
关键