Java Reflection

Java ReflectionSpring

API

Java API Class

  • java.lang.Class
  • java.lang.reflect.Field
  • java.lang.reflect.Method
  • java.lang.reflect.Constructor

  1. Class Class
  2. Class
  3. API

Java

1. Class

JVM Class Class

Class<?> clazz = String.class;

String str = "Hello";
Class<?> clazz = str.getClass();

Class.forName()

Class<?> clazz = Class.forName("java.lang.String");

2.

Class<?> clazz = Class.forName("java.lang.String");
Object obj = clazz.getDeclaredConstructor().newInstance();

3.

Class<?> clazz = Person.class;
Field field = clazz.getDeclaredField("name");
field.setAccessible(true); // 
Object value = field.get(personInstance); // 
field.set(personInstance, "New Name"); // 

4.

Class<?> clazz = Person.class;
Method method = clazz.getMethod("sayHello");
method.invoke(personInstance);

Method methodWithArgs = clazz.getMethod("greet", String.class);
methodWithArgs.invoke(personInstance, "World");

5.

Class<?> clazz = Person.class;
Constructor<?> constructor = clazz.getConstructor(String.class, int.class);
Object obj = constructor.newInstance("John", 30);

6.

Class<?> clazz = Person.class;

// 
Class<?>[] interfaces = clazz.getInterfaces();
for (Class<?> i : interfaces) {
    System.out.println("Interface: " + i.getName());
}

// 
Class<?> superClass = clazz.getSuperclass();
System.out.println("Superclass: " + superClass.getName());

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class ReflectionExample {

    public static void main(String[] args) throws Exception {
        // Class
        Class<?> clazz = Person.class;
       
        //
        Constructor<?> constructor = clazz.getConstructor(String.class, int.class);
        Object person = constructor.newInstance("John", 30);
       
        //
        Field nameField = clazz.getDeclaredField("name");
        nameField.setAccessible(true);
        System.out.println("Name: " + nameField.get(person));
       
        //
        nameField.set(person, "Doe");
        System.out.println("Updated Name: " + nameField.get(person));
       
        //
        Method greetMethod = clazz.getMethod("greet", String.class);
        greetMethod.invoke(person, "World");
    }
}

class Person {
    private String name;
    private int age;

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

    public void greet(String message) {
        System.out.println(name + " says: " + message);
    }
}

Name: John
Updated Name: Doe
Doe says: World

java.lang.reflect

java.lang.reflect Java API

javalang.png [javalang.png]

java.lang.reflect

1. Class

    • getFields()
    • getDeclaredFields()
    • getMethods()
    • getDeclaredMethods()
    • getConstructors()
    • getDeclaredConstructors()
    • getSuperclass()
    • getInterfaces()

2. Field

    • get(Object obj)
    • set(Object obj, Object value)
    • getType()
    • getModifiers() publicprivate

3. Method

    • invoke(Object obj, Object... args)
    • getReturnType()
    • getParameterTypes()
    • getModifiers() publicprivate

4. Constructor

    • newInstance(Object... initargs)
    • getParameterTypes()
    • getModifiers() publicprivate

java.lang.reflect

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Constructor;

public class ReflectionExample {

    public static void main(String[] args) throws Exception {
        // Class
        Class<?> clazz = Car.class;

        // Car
        Constructor<?> constructor = clazz.getConstructor(String.class, int.class);
        Object car = constructor.newInstance("Toyota", 2020);

        //
        Field modelField = clazz.getDeclaredField("model");
        Field yearField = clazz.getDeclaredField("year");
       
        //
        modelField.setAccessible(true);
        yearField.setAccessible(true);
       
        //
        System.out.println("Original Model: " + modelField.get(car));
        System.out.println("Original Year: " + yearField.get(car));
       
        //
        modelField.set(car, "Honda");
        yearField.set(car, 2024);
       
        //
        System.out.println("Updated Model: " + modelField.get(car));
        System.out.println("Updated Year: " + yearField.get(car));
       
        //
        Method startMethod = clazz.getMethod("start");
        startMethod.invoke(car);
    }
}

class Car {
    private String model;
    private int year;

    public Car(String model, int year) {
        this.model = model;
        this.year = year;
    }

    public void start() {
        System.out.println("The " + model + " car of year " + year + " is starting.");
    }
}

Original Model: Toyota
Original Year: 2020
Updated Model: Honda
Updated Year: 2024
The Honda car of year 2024 is starting.