Subjects

All subjects Django Java Python React Spring Boot JavaScript PHP
Sign Up Free
Interview question

What is the Reflection API in Java and what can you do with it? Java में Reflection API क्या है और इससे क्या कर सकते हैं?

Answer

Reflection lets a program inspect and manipulate classes, methods, fields, and constructors at RUNTIME, even without knowing their names at compile time - the foundation of many frameworks (Spring, Hibernate, JUnit).

import java.lang.reflect.*;

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    private void greet() {
        System.out.println('Hello, ' + name);
    }
}

public class ReflectionDemo {
    public static void main(String[] args) throws Exception {
        Class<?> clazz = Class.forName('Person');  // or Person.class

        // Inspecting fields
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            System.out.println('Field: ' + field.getName() + ' - ' + field.getType());
        }

        // Inspecting methods
        Method[] methods = clazz.getDeclaredMethods();
        for (Method method : methods) {
            System.out.println('Method: ' + method.getName());
        }

        // Creating an instance dynamically
        Constructor<?> constructor = clazz.getConstructor(String.class, int.class);
        Object person = constructor.newInstance('John', 30);

        // Accessing a PRIVATE field via reflection
        Field nameField = clazz.getDeclaredField('name');
        nameField.setAccessible(true);  // bypasses access control
        String name = (String) nameField.get(person);
        System.out.println('Name: ' + name);  // John

        // Calling a PRIVATE method via reflection
        Method greetMethod = clazz.getDeclaredMethod('greet');
        greetMethod.setAccessible(true);
        greetMethod.invoke(person);  // Hello, John
    }
}

// Real-world uses: Spring's dependency injection, JUnit finding @Test methods,
// JSON libraries (Gson/Jackson) mapping fields, ORM frameworks like Hibernate

Reflection एक program को RUNTIME पर classes, methods, fields, constructors inspect और manipulate करने देता है, compile time पर names जाने बिना भी - कई frameworks (Spring, Hibernate, JUnit) की foundation है।

import java.lang.reflect.*;

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    private void greet() {
        System.out.println('Hello, ' + name);
    }
}

public class ReflectionDemo {
    public static void main(String[] args) throws Exception {
        Class<?> clazz = Class.forName('Person');

        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            System.out.println('Field: ' + field.getName());
        }

        Constructor<?> constructor = clazz.getConstructor(String.class, int.class);
        Object person = constructor.newInstance('John', 30);

        Field nameField = clazz.getDeclaredField('name');
        nameField.setAccessible(true);
        String name = (String) nameField.get(person);
        System.out.println('Name: ' + name);

        Method greetMethod = clazz.getDeclaredMethod('greet');
        greetMethod.setAccessible(true);
        greetMethod.invoke(person);
    }
}

Was this answer clear?