Sobes.tech
Junior — Middle

Ar galima iškviesti klasės privačią metodą iš jos apibrėžimo išorės?

sobes.tech AI

Atsakymas iš AI

Java kalboje nėra galimybės tiesiogiai iškviesti privataus klasės metodo iš už jos apibrėžimo, nes modifikatorius private riboja prieigą tik klasės viduje.

Tačiau, naudojant refleksiją, galima pasiekti ir iškviesti privačius metodus nepaisant šių apribojimų. Pavyzdžiui:

import java.lang.reflect.Method;

class MyClass {
    private void secret() {
        System.out.println("Privatus metodas iškviestas");
    }
}

public class Test {
    public static void main(String[] args) throws Exception {
        MyClass obj = new MyClass();
        Method method = MyClass.class.getDeclaredMethod("secret");
        method.setAccessible(true); // pašalina prieigos apribojimą
        method.invoke(obj); // iškviečia privatų metodą
    }
}

Taip, įprastas iškvietimas nėra įmanomas, tačiau refleksija leidžia apeiti šį apribojimą.