Avatar ·

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)

关键