Возвращение класса в Kotlin - PullRequest
       0

Возвращение класса в Kotlin

0 голосов
/ 17 февраля 2020
class Wolf {
    var hunger = 10
    val food = "meat"

    fun eat() {
        println("The Wolf is eating $food")
    }
}

class MyWolf {
    var wolf: Wolf? = Wolf()

    fun myFunction() {
        wolf?.eat()
    }
}

fun getAlphaWolf(): Wolf? {
    return Wolf()
}

fun main(args: Array<String>) {
    var w: Wolf? = Wolf()

    if (w != null) {
        w.eat()
    }

    var x = w?.hunger
    println("The value of x is $x")

    var y = w?.hunger ?: -1
    println("The value of y is $y")

    var myWolf = MyWolf()
    myWolf?.wolf?.hunger = 8
    println("The value of myWolf?.wolf?.hunger is ${myWolf?.wolf?.hunger}")

    var myArray = arrayOf("Hi", "Hello", null)
    for (item in myArray) {
        item?.let { println(it) }
    }

    getAlphaWolf()?.let { it.eat() }

    w = null
    var z = w!!.hunger
}

Этот код извлечен из учебника Kotlin. У меня проблема со следующим:

fun getAlphaWolf(): Wolf? {
     return Wolf()
}

Поскольку в коде есть только класс с именем Wolf, но нет переменной с именем Wolf. Интересно, возможно ли вернуть класс внутри функции? Что выводится, если класс возвращается внутри функции?

Ответы [ 2 ]

2 голосов
/ 17 февраля 2020

Если вы знакомы с Java, то это Kotlin эквивалентно:

public class Application {
    public Wolf getAlphaWolf() {
        return new Wolf();
    }
}

Итак, в Kotlin вы вызываете конструктор без аргументов. Если вы хотите вернуть класс Wolf, то это также возможно:

fun getWolfClass(): KClass<Wolf> {
    return Wolf::class
}
1 голос
/ 17 февраля 2020

В следующем коде вызывается первичный конструктор класса Wolf:

fun getAlphaWolf(): Wolf? {
     return Wolf()
}

Итак, getAlphaWolf возвращает совершенно новый экземпляр Wolf со значениями по умолчанию: Wolf(hunger=10,food=meat).

Обновление: кстати, сделать тип возвращаемого значения этой функции равным nullable избыточно, потому что новый экземпляр не может быть null.

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