Есть ли эквивалент C# ключевого слова по умолчанию для Kotlin? - PullRequest
2 голосов
/ 11 апреля 2020

Пример кода:

import java.util.UUID

interface InterfaceOne<AType> {
    var abcOne:AType
}

interface InterfaceTwo<AType> {
    var abcTwo:AType
}

class Example<AType>: InterfaceOne<AType>, InterfaceTwo<AType> {

    override var abcOne: AType // Looking for default value to not from constructor 
    set(value) {
        field = value
        //...
    }

    override var abcTwo: AType // Looking for default value to not from constructor 
    set(value) {
        field = value
            //...
    }

   fun test(uuid: AType) {
       abcTwo = uuid
       abcOne = default // I'm looking for C#'s default keyword equivalent in here
   }
}

fun main() {

    val uuid = UUID.randomUUID()
    val uuid2 = UUID.randomUUID()

    val interfaceOne = Example<UUID>()

    interfaceOne.test(uuid)
}

Вы можете использовать мою площадку для тестирования! Нажмите здесь .

1 Ответ

3 голосов
/ 11 апреля 2020

Я считаю, что Kotlin не имеет эквивалентной функции. В Kotlin нет литерала по умолчанию . Kotlin не инициализирует поля класса для любых значений по умолчанию, даже для примитивов (в отличие от Java, где, например, int инициализируется в 0).

Вы также должны инициализировать свои поля в первичном конструкторе, или при объявлении, или сделать их обнуляемыми и оставить их неинициализированными (null).

Kotlin позволяет указывать значения по умолчанию для значений параметров в конструкторе, но это должен быть экземпляр конкретный класс, так что он не может принять во внимание шаблон c.

Вы можете использовать метод фабрики для генерации значения по умолчанию:

class Example<AType>(val factory: () -> AType): InterfaceOne<AType>, InterfaceTwo<AType> {

    override var abcOne: AType = factory()

    override var abcTwo: AType = factory()

    fun test(uuid: AType) {
        abcTwo = uuid
        abcOne = factory()
        println("abcOne=$abcOne")
        println("abcTwo=$abcTwo")
    }
}

fun main() {

    val uuid = UUID.randomUUID()
    val uuidExample = Example<UUID>({UUID.randomUUID()})
    uuidExample.test(uuid)

    val stringExample = Example<String>({"default"})
    stringExample.test("two")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...