Kotlin codelab: нет возвращаемого значения, так почему возвращается тип generi c? - PullRequest
0 голосов
/ 26 марта 2020

Недавно я проходил урок в коде 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) возвращается, когда ничего не предполагается возвращать?

1 Ответ

1 голос
/ 26 марта 2020

Ключом здесь является эта часть:

тип generi c возвращается только при получении свойства waterSupply

Конструктор Aquarium class ' занимает val waterSupply: T. Обратите внимание на val часть; это заставляет компилятор Kotlin выставлять waterSupply как свойство любого экземпляра Aquarium. Следовательно, вы можете позвонить someAquariumInstance.waterSupply и что-то типа T будет возвращено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...