【发布时间】:2020-03-26 13:58:48
【问题描述】:
我最近在 Google 代码实验室中为 Kotlin 浏览 lesson,我无法理解这部分:
这是水族馆的定义:
class Aquarium<T: WaterSupply>(val waterSupply: T) {
fun addWater() {
check(!waterSupply.needsProcessing) { "water supply needs processing first" }
println("adding water from $waterSupply")
}
}
查看 Aquarium 类,您会发现只有在获取属性 waterSupply 时才会返回泛型类型。没有任何方法将 T 类型的值作为参数(除了在构造函数中定义它)。 Kotlin 允许您为这种情况定义类型,并且它可以推断出有关类型在何处可以安全使用的额外信息。类似地,您可以在类型中定义仅传递给方法而不是返回的泛型类型。这允许 Kotlin 对代码安全进行额外检查。
Aquarium 类中只有一个函数,它什么都不返回(Unit),而不是 WaterSupply(这个例子可能是指“通用类型”的 WaterSupply)。我很困惑为什么代码实验室说返回泛型类型(WaterSupply),而什么都不应该返回?
【问题讨论】:
-
'val waterSupply' 是一个属性,因此可以通过调用 'aquarium.waterSupply' 来访问(返回)