java反射初

 //获取类
        Class<A> a= A.class;
        //获取所有构造
        Constructor<?>[] declaredConstructors = a.getDeclaredConstructors();
        for (int i=0;i<declaredConstructors.length;i++){
            //构造的修饰符
            System.out.print(Modifier.toString(declaredConstructors[i].getModifiers()) +"参数:");
            //获取构造的参数类型
            Class<?>[] parameterTypes = declaredConstructors[i].getParameterTypes();
            for (int i1 = 0; i1 < parameterTypes.length; i1++) {
                System.out.print(parameterTypes[i].getName()+" ");
            }
            System.out.println("");
        }
        //单个构造
        try {
            Constructor<ManufacturerEntity> declaredConstructor = a.getDeclaredConstructor();
            System.out.println(Modifier.toString(declaredConstructor.getModifiers()));
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
        //根据条件获取构造
        //设置要获取固定数类型的构造
        Class[] p={String.class,String.class,String.class,String.class,String.class,DataSourceType.class};
        try {
            Constructor<A> declaredConstructor = a.getDeclaredConstructor(p);
            System.out.print(Modifier.toString(declaredConstructor.getModifiers())+"参数:");
            Class<?>[] parameterTypes = declaredConstructor.getParameterTypes();
            for (int i = 0; i < parameterTypes.length; i++) {
                System.out.print(parameterTypes[i].getName() + "");
            }
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }


        //通过反射找到对应的构造方法创建实例
        B b =null;
        try {
            Constructor<A> declaredConstructor = a.getDeclaredConstructor(p);
            System.out.println();
            //反射通过newInstance创建对象
             b= declaredConstructor.newInstance("1", "2", "3", "4", "5", DataSourceType.NUDE);
            System.out.println(manufacturerEntity.toString());
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }

        //通过反射调用类中的私有方法
        Class[] types={String.class};
        //param1:方法名;param2:参数类型数组
        Method method = a.getDeclaredMethod("test", types);
        method.setAccessible(true);
        //param1:实例名;param2:参数
        method.invoke(manufacturerEntity,"123213");

        //通过反射set
        Field name= a.getDeclaredField("name");
        name.setAccessible(true);
        name.set(manufacturerEntity,"厂家");
        System.out.println(name.get(b));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值