JvmDefault
@Target([AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY]) annotation class JvmDefault
Указывает, что для неабстрактного члена Kotlin-интерфейса должна быть сгенерирована JVM-по умолчанию.
Использование этой аннотации требует явного указания аргумента компиляции: либо -Xjvm-default=enable или -Xjvm-default=compatibility.
- с
-Xjvm-default=enable, генерируется только метод по умолчанию в интерфейсе для каждого метода @JvmDefault. В этом режиме аннотирование существующего метода @JvmDefault может нарушить бинарную совместимость, потому что это фактически удалит метод из классаDefaultImpls. - с
-Xjvm-default=compatibility, помимо метода интерфейса по умолчанию, в классеDefaultImplsгенерируется совместимый аксессор, который вызывает метод интерфейса по умолчанию через синтетический аксессор. В этом режиме аннотирование существующего метода @JvmDefault является бинарно совместимым, но приводит к большему количеству методов в байткоде.
Удаление этой аннотации из члена интерфейса является бинарно несовместимым изменением в обоих режимах.
Генерация методов по умолчанию возможна только с версией байткода JVM 1.8 (-jvm-target 1.8) или выше.
Методы @JvmDefault исключены из делегирования интерфейса.
Конструкторы
<init>
Указывает, что для неабстрактного члена Kotlin-интерфейса должна быть сгенерирована JVM-по умолчанию.
JvmDefault()
© 2010–2020 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.jvm/-jvm-default/index.html