[[:oktatas:programozás:java|< Java]] ====== A Java reflektív hozzáférés ====== * **Szerző:** Sallai András * Copyright (c) 2025, Sallai András * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]] * Web: https://szit.hu ===== Bevezetés ===== A Java reflektív (reflection, tükrözés) hozzáférés a nyelv egyik jellemzője. A futó program belenézhet önmagába, és módosíthatja a program belső tulajdonságait. Pascal, C vagy C++ nyelvekben nincs ilyen lehetőség. A reflektív hozzáférés során megtehető: * Osztályok, metódusok, mezők lekérdezése futási időben. * Objektum típusának meghatározása, metódusok listázása és mások. * Privát mezők és metódusok elérése * Metódus meghívása dinamikusan, az osztály nevének ismerete nélkül. ===== Az ArrayList metódusai ===== import java.lang.reflect.*; public class App { public static void main(String args[]) { try { Class c = Class.forName(args[0]); Method m[] = c.getDeclaredMethods(); for (int i = 0; i < m.length; i++) System.out.println(m[i].toString()); } catch (Throwable e) { System.err.println(e); } } } Futtatás: java App java.util.ArrayList ===== A Valami osztály ===== import java.lang.reflect.Method; class Valami { private void sayHello() { System.out.println("Helló reflexió!"); } } public class App { public static void main(String args[]) throws Exception { Valami obj = new Valami(); Method method = Valami.class.getDeclaredMethod("sayHello"); method.setAccessible(true); method.invoke(obj); } } ===== Forrás ===== * https://www.oracle.com/technical-resources/articles/java/javareflection.html (2025)