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ą.