栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java,简单的反射运用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java,简单的反射运用

反射,在java中是非常常见的一功能和操作。

我最常听到的就是,xx框架在什么什么的时候采用的反射,从而达到动态代理的效果等等。然后就什么什么框架因为包含反射所以不安全或者速度不够快等等。

道听途说总是迷茫和羡慕,待我认真看起反射以后,发现也没有想象中的那么难,但却十分的酷炫。

获取字段和赋值字段

首先,简单的反射使用,获取字段和赋值字段是我最经常使用的,可以简单的写个通用方法,非常便捷

	public static void setValue(Object object, String key, Object value){
        try {
            Class clazz = object.getClass();
            Field field = clazz.getDeclaredField(key);
            field.setAccessible(true);
            field.set(object, value);
        }catch (Exception e){
            System.out.println(e);
        }
    }

    public static Object getValue(Object object, String key){
        try {
            //如果想专门找父类可以用getClass().getSuperclass()
            Class clazz = object.getClass();
            //获取非public得用getDeclaredField,getField可以获取到父类的
            Field field = clazz.getDeclaredField(key);
            //此设置重要,大多数字段封装都是私有的,设置以后才能访问非public字段
            field.setAccessible(true);
            Object value = field.get(object);
            return value;
        }catch (Exception e){
            System.out.println(e);
        }
        return null;
    }
获取方法

用的少就直接复制了,感觉获取方法并不好做通用工具,又要区分多态,还要确认形参个数和类型然后还有返回值类型,感觉如果都知道了,暂时还没想到怎么写工具类,等我再看看

		//其实用起来在获取上和字段差距不大
		//第一个参数是方法名,后面可以填多个是代表形参类型
		Method m = getClass().getMethod("方法名",int.class...);
		//非public方法用Class.getDeclaredMethod()
		//Method也有setAccessible方法和Field的作用基本一样
		m.setAccessible(true);
		//对于Method,使用invoke方法就相当于调用Method
		//如果是静态方法,invoke第一参数为null
		m.invoke(object,1);
获取构造方法

等我明天再继续写,最近换了公司,比较摆,也很迷茫,最近算是收拾收拾准备好好学习,虽然不知道前方是什么在等待着我,但学习总是没错的,共勉

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/926876.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号