Есть ли у Kotlin класс расширения для интерфейса, подобного Swift? - PullRequest
0 голосов
/ 16 мая 2018

В Swift мы могли бы расширить класс с помощью интерфейса, как показано ниже

extension MyExtend {
   public var type: String { return "" }
}

extension MyOrigin: MyExtend {
   public var type: ListItemDataType {
       return "Origin"
   }
}

Есть ли у нас такая возможность в Котлине? (например, расширить интерфейс)

1 Ответ

0 голосов
/ 16 мая 2018

Да, Kotlin имеет Extensions - аналогично Swift .

Swift :

class C {
    func foo(i: String) { print("class") }
}

extension C {
    func foo(i: Int) { print("extension") }
}

C().foo(i: "A")
C().foo(i: 1)

Kotlin :

class C {
    fun foo(i: String) { println("class") }
}

fun C.foo(i: Int) { println("extension") }

C().foo("A")
C().foo(1)

Вывод :

class
extension

Есть некоторые ключевые отличия, которые вы хотитечитать дальше.

Расширения фактически не изменяют классы, которые они расширяют.Определяя расширение, вы не вставляете новые члены в класс, а просто делаете их вызываемыми с помощью точечной нотации для переменных этого типа.

Мы хотели бы подчеркнуть, что функции расширения отправляются статически,то есть они не являются виртуальными по типу приемника.Это означает, что вызываемая функция расширения определяется типом выражения, для которого вызывается функция, а не типом результата вычисления этого выражения во время выполнения.

https://kotlinlang.org/docs/reference/extensions.html

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