Недавно я проходил урок в коде Google для Kotlin, и я не мог понять эту часть:
Это определение для Аквариума:
class Aquarium<T: WaterSupply>(val waterSupply: T) {
fun addWater() {
check(!waterSupply.needsProcessing) { "water supply needs processing first" }
println("adding water from $waterSupply")
}
}
Посмотрите на класс Aquarium, и вы увидите, что тип generi c возвращается только при получении свойства waterSupply. Нет никаких методов, которые бы принимали значение типа T в качестве параметра (кроме определения его в конструкторе). Kotlin позволяет вам определять типы именно для этого случая и может выводить дополнительную информацию о том, где типы безопасны для использования. Точно так же вы можете определить типы для обобщенных типов c, которые только когда-либо передаются в методы, но не возвращаются. Это позволяет Kotlin выполнять дополнительные проверки безопасности кода.
В классе Aquarium есть только одна функция, которая ничего не возвращает (Unit), а не WaterSupply (в этом примере, вероятно, WaterSupply означает " generi c type "). Я не понимаю, почему кодовая метка говорит, что тип generi c (WaterSupply) возвращается, когда ничего не предполагается возвращать?