Sobes.tech
Junior — Middle

Πώς υλοποιείται και λειτουργεί η λειτουργία επέκτασης σε Kotlin σε επίπεδο χαμηλού επιπέδου;

sobes.tech AI

Απάντηση από AI

Οι λειτουργίες επέκτασης στο Kotlin στην πραγματικότητα δεν προσθέτουν μεθόδους στην κλάση σε επίπεδο bytecode. Υλοποιούνται ως στατικές μέθοδοι που δέχονται ένα αντικείμενο-δέκτη ως πρώτο παράμετρο.

Για παράδειγμα, μια λειτουργία:

fun String.lastChar(): Char = this.get(this.length - 1)

Μεταγλωττίζεται περίπου σε μια μέθοδο Java:

public static char lastChar(String receiver) {
    return receiver.charAt(receiver.length() - 1);
}

Δηλαδή, οι λειτουργίες επέκτασης είναι ζάχαρη σύνταξης που επιτρέπει την κλήση αυτών των στατικών μεθόδων σαν να ήταν μέθοδοι του αντικειμένου. Αυτό σημαίνει ότι οι επεκτάσεις δεν μπορούν να έχουν πρόσβαση σε ιδιωτικά μέλη της κλάσης, καθώς δεν αποτελούν μέρος αυτής.

Η κλήση "abc".lastChar() μεταγλωττίζεται σε μια κλήση Extensions.lastChar("abc").

Έτσι, οι επεκτάσεις υλοποιούνται σε επίπεδο JVM ως συνηθισμένες στατικές μέθοδοι με τον πρώτο παράμετρο — το αντικείμενο στο οποίο εφαρμόζεται η επέκταση.