package J20250806.reflection;

import java.lang.reflect.Constructor;
import java.util.Arrays;

/**
 * @author WanJl
 * @version 1.0
 * @title Demo06_ConstructorTest
 * @description 获取构造方法的参数类型以及修饰符
 * @create 2025/8/6
 */
public class Demo06_ConstructorTest {
    public static void main(String[] args) throws NoSuchMethodException {
        //通过类名.class反射方式获取Person类的Class对象
        Class<Person> personClass = Person.class;
        //通过personClass对象获取Person类的构造方法，无论是否是私有化的。由于没有填写参数类型，因此是获取无参的
        Constructor<Person> personConstructor = personClass.getDeclaredConstructor(Integer.class,String.class,Integer.class,String.class);
        //如果目标构造方法是私有的，那么需要调用一个方法，增加取消检查标志
        personConstructor.setAccessible(true);  //暴力反射
        //获取构造方法的参数类型  getParameterTypes()
        Class<?>[] parameterTypes = personConstructor.getParameterTypes();
        System.out.println(Arrays.toString(parameterTypes));
        //获取构造方法的修饰符      getModifiers()
        int modifiers = personConstructor.getModifiers();
        System.out.println(modifiers);  //2 表示私有化的修饰符private
        //获取构造方法参数的个数   getParameterCount()
        int parameterCount = personConstructor.getParameterCount();
        System.out.println("该构造方法共有："+parameterCount+"个参数");
    }
}
