Java 反射设置入参

Java 反射是指程序在运行时可以获取一个类的信息(如字段、方法、构造器等),并且可以在运行时调用类的方法或者创建对象。反射是Java语言的一个特性,它使得程序可以在运行时动态地加载、探测和使用编译时未知的类。

Java 反射可以用于很多场景,其中之一就是设置方法的入参。在实际开发中,我们有时候需要在运行时动态地设置方法的入参,而不是在编译时确定。本文将详细介绍如何使用 Java 反射来设置方法的入参。

获取方法的参数信息

在使用反射设置方法入参之前,我们首先需要获取方法的参数信息。Java 反射提供了几种方法来获取方法的参数信息:

  1. Class.getMethod(String name, Class<?>... parameterTypes): 通过方法名和参数类型获取方法对象。
  2. Method.getParameterTypes(): 获取方法参数的类型数组。
  3. Method.getParameters(): 获取方法的参数信息。

下面是一个示例代码,演示如何获取方法的参数信息:

import java.lang.reflect.Method;
import java.lang.reflect.Parameter;

public class ReflectionExample {

    public void sayHello(String name, int age) {
        System.out.println("Hello " + name + ", you are " + age + " years old.");
    }

    public static void main(String[] args) throws NoSuchMethodException {
        ReflectionExample example = new ReflectionExample();
        Method method = example.getClass().getMethod("sayHello", String.class, int.class);
        
        // 获取方法参数的类型数组
        Class<?>[] parameterTypes = method.getParameterTypes();
        for (Class<?> parameterType : parameterTypes) {
            System.out.println("Parameter Type: " + parameterType.getName());
        }
        
        // 获取方法的参数信息
        Parameter[] parameters = method.getParameters();
        for (Parameter parameter : parameters) {
            System.out.println("Parameter Name: " + parameter.getName());
            System.out.println("Parameter Type: " + parameter.getType().getName());
        }
    }
}

以上代码中,getMethod() 方法传入了方法名和参数类型,返回了一个 Method 对象。然后通过 getParameterTypes() 方法获取了方法参数的类型数组,通过 getParameters() 方法获取了方法的参数信息。

设置方法的入参

获取了方法的参数信息之后,我们就可以使用反射来设置方法的入参了。Java 反射提供了几种方法来设置方法的入参:

  1. Method.invoke(Object obj, Object... args): 通过反射调用方法,并设置方法的入参。
  2. Constructor.newInstance(Object... initargs): 通过反射创建对象,并设置构造器的入参。

下面是一个示例代码,演示如何使用反射设置方法的入参:

import java.lang.reflect.Method;

public class ReflectionExample {

    public void sayHello(String name, int age) {
        System.out.println("Hello " + name + ", you are " + age + " years old.");
    }

    public static void main(String[] args) throws Exception {
        ReflectionExample example = new ReflectionExample();
        Method method = example.getClass().getMethod("sayHello", String.class, int.class);

        // 设置方法的入参并调用方法
        method.invoke(example, "Alice", 20);
    }
}

以上代码中,invoke() 方法传入了一个对象和方法的入参,通过反射调用了 sayHello() 方法,并设置了方法的入参为 "Alice"20

使用反射动态设置方法入参

除了上面的示例,我们还可以通过一些动态的方式来设置方法的入参。下面是一些常见的动态设置方法入参的方式:

1. 从用户输入获取方法入参

我们可以通过用户输入来动态地获取方法的入参。下面是一个示例代码,演示如何从用户输入获取方法的入参:

import java.lang.reflect.Method;
import java.util.Scanner;

public class ReflectionExample {

    public void sayHello(String name, int age) {
        System.out.println("Hello " + name + ", you are " + age + " years old.");
    }

    public static void main(String[] args) throws Exception {
        ReflectionExample example = new ReflectionExample();
        Method method = example.getClass().getMethod("sayHello", String.class, int.class);

        // 从用户输入获取方法的入参
        Scanner scanner = new Scanner(System.in);
        System.out.print("Please enter your name: ");
        String name = scanner.nextLine();
        System.out.print