Sobes.tech
Middle+

Kas nutiks, jei iš Java kodo prieisite Kotlin įgyvendinto objekto vidiniam (internal) laukui?

sobes.tech AI

Atsakymas iš AI

Klaida įvyks kompiliacijos metu.

// Kotlin kodas
class MyClass {
    internal val internalProperty: String = "Vidinė reikšmė"
}
// Java kodas, bandantis pasiekti vidinę savybę
public class JavaClass {
    public void accessInternalProperty() {
        MyClass myObject = new MyClass();
        // Šis eilutė sukels kompiliacijos klaidą
        // System.out.println(myObject.internalProperty);
    }
}

internal matomumas Kotlin reiškia, kad klasės narys matomas tik tame pačiame modulyje. Java požiūriu, tai panašu į package-private matomumą, tačiau taikoma visoms klasėms tame pačiame Kotlin kompiliacijos modulyje, o ne tik tame pačiame pakete. Java kompiliatorius tiesiogiai neprieina prie Kotlin internal narių iš kitų modulių (net jei jie yra tame pačiame pakete), kas sukelia kompiliacijos klaidą. Kotlin generuoja specialius pavadinimus internal nariams, kurie apima modulio pavadinimą, siekiant užkirsti kelią prieigai iš išorės.