Как передать несколько типов в списке в функцию? - PullRequest
0 голосов
/ 18 октября 2019

Я хочу иметь возможность передавать неопределенное число MyDataStruct, каждое из которых принимает тип как dataList, обрабатывать эти данные как их тип и возвращать список списков, сохраняя типы в порядке.

Я пришел из фона JavaScript / TypeScript и пытаюсь изучить Kotlin, поэтому я столкнулся с этой проблемой.

fun myFunction(
    dataList: List<MyDataStruct<String>, MyDataStruct<Int>, MyDataStruct<Boolean>>
): List<List<String>, List<Int>, List<Boolean>> {
    val data = dataList.map {
        ...mutableListOf<mutableListOf.typeAssiged>
    }
}

1 Ответ

1 голос
/ 18 октября 2019

Вы можете использовать для этого объявление vararg:

fun myFunction(vararg dataList: MyDataStruct) {
    // code can use dataList as an array / list of MyDataStruct

}

Однако это может развалиться с параметрами типа, указанными в MyDataStruct, но вы все равно можете обрабатывать различные значения в объекте сwhen предложение.

Например (при условии, что вы сохраняете свойство value в своей структуре данных):

for(myDataStruct in dataList) {
    when (myDataStruct.value) {
        is Int -> {/*do something with int*/}
        is String -> {/*do something with string*/}
        is Boolean -> {/*do something with boolean*/}
        else -> {/*do something else*/}
    }

}

Наконец, скобки ({}) после стрелокв каждом операторе when необязательно, если у вас есть вызов функции из одной строки. Текущий пример представляет собой набор пустых анонимных функций, которые должны компилироваться, но ничего не делать. Вам также понадобятся эти скобки, если вам нужно выполнить многострочную функцию, когда значение имеет определенный тип.

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