Ответ
Нет, extension-функции в Kotlin не всегда компилируются в статические методы.
- Для обычных классов extension-функции компилируются в статические методы, принимающие объект-получатель первым параметром.
// Kotlin
fun String.printLength() = println(length)
// Java-эквивалент
public static void printLength(String receiver) {
System.out.println(receiver.length());
}
- Для generic-классов с реифицированными типами (
inline+reified) extension-функции не могут быть статическими, так как требуют информации о типе во время выполнения.
inline fun <reified T> T.printType() = println(T::class.java)
Также extension-свойства всегда компилируются в статические методы-аксессоры.