Java reflection

Kategória: Java standard könyvtárak.

A Java reflection segítségével futási időben tudjuk manipulálni az osztályokat, objektumokat: le tudjuk kérni a metódusok listáját, tudjuk módosítani azok hozzáférhetőségét, meg is tudjuk hívni, hasonlóan el tudjuk érni az attribútumokat, és még hosszasan lehetne sorolni, hogy mi mindent lehet vele elvégezni. Lássunk egy példát arra, hogy ennek segítségével hogyan tudunk meghívni egy privát függvényt!

import java.lang.reflect.Method;
 
class TestClass {
    private int privateFunction(int n) {
        System.out.println("Private function called");
        return n * n;
    }
}
 
public class ReflectionExample {
    public static void main(String[] args) throws Exception {
        Class<TestClass> testClass = TestClass.class;
        Method privateFunction = testClass.getDeclaredMethod("privateFunction", int.class);
        privateFunction.setAccessible(true);
        int result = (int)privateFunction.invoke(new TestClass(), 5);
        System.out.println(result);
    }
}

A folyamat számos kivételt dobhat, melyekkel a példában nem foglalkozunk. Általában egyébként lemondható, hogy a Java reflection-nel csínján kell bánni, mivel jelentősen ronthatja a kód áttekinthetőségét. A fenti példában pl. a fejlesztői környezetek által felépített híváshierarchia nem tartalmazza a függvényhívást.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License