Функции расширения аналогичны тем, которые вы создаете как служебные функции.
Базовый пример будет примерно таким:
// Strings.kt
fun String.isEmail() : Boolean {
// check for email pattern and return true/false
}
Этот код можно записать как служебную функцию на Java следующим образом:
class StringUtils {
public static boolean isEmail(String email) {
// check for email pattern and return true/false
}
}
По сути, он делает то, что вызов той же функции с объектом, который вы вызываете, будет передан в качестве первого параметра аргументу. Подобно той же функции, которую я привел в Java
.
Если вы хотите вызвать функцию расширения, созданную в kotlin
из java
, вам необходимо передать вызывающего в качестве первого аргумента. Нравится,
StringsKt.isEmail("[email protected]")
Согласно документации,
Расширения фактически не изменяют классы, которые они расширяют. Определяя расширение, вы не вставляете новые члены в класс, а просто делаете новые функции вызываемыми с точечной нотацией для переменных этого типа.
Это просто статические функции, в которых вызывающий объект является первым аргументом, а за ним следуют другие параметры. Это просто расширяет наши возможности так писать.
Когда создавать функции расширения?
- Когда у вас нет доступа к этому классу. Когда этот класс принадлежит какой-то библиотеке, которую вы не создали.
- Для примитивных типов. Int, Float, String и т. Д.
Другая причина для использования функции расширения заключается в том, что вам не нужно расширять этот класс, чтобы использовать методы, как если бы они принадлежали этому классу (но фактически не являются его частью).
Надеюсь, это немного проясняет вам ...
person
kirtan403
schedule
11.11.2017