Родовая функция в Котлине - PullRequest
0 голосов
/ 08 марта 2019

В Kotlin у вас может быть такая общая функция:

fun <T> singletonList(item: T): List<T> {
    // ...
}

Я не понимаю, для чего предназначено <T> после ключевого слова fun.Функция возвращает List<T>, так в чем же смысл <T>?

Ответы [ 2 ]

3 голосов
/ 08 марта 2019

Чтобы иметь возможность создать универсальную функцию, компилятор должен знать, что вы хотите работать с разными типами.Kotlin - это (как Java или C #) язык со строгой типизацией.так что просто передача разных типов в функцию приведет к сумасшествию компилятора.

Чтобы сообщить компилятору, что функция должна принимать несколько типов, необходимо добавить «параметр типа»

<T> после fun находится определение указанного «параметра типа».
, которое затем используется в аргументе item.

Теперь компилятор знает, что вы зададите тип itemкогда вы делаете вызов singletonList(item: T)

Просто выполнение

fun singletonList(item: T) : List<T> {[...]}

сделает компилятор несчастным, поскольку он не знает T.
(Пока вы некласс с именем T)

Вы также можете иметь несколько «Типовых параметров», разделяя их запятыми:

fun <T, U> otherFunction(firstParam: T, secondParam: U): ReturnType
0 голосов
/ 08 марта 2019

Это универсальная функция, которая, согласно требованиям синтаксиса языка, должна предоставлять эту часть <T>.Вы можете использовать его, чтобы указать T далее:

fun <T: Number> singletonList(item: T): List<T> {
    // ...
}

Также часто бывает несколько универсальных типов:

fun <T: Number, R: Any> singletonList(item: T): R {
    // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...