java反射
2016-05-20 00:00
507 查看
摘要: java反射的简单应用
目前是jdk1.8,主要结合此进行;
#1. 获取字段
根据实例获取class,然后用class的到field,然后通过field来获取结果,常用Field.get(Class的instance),当然还有其他获取值得方法,如Field.getString(instance),Field.getInteger(instance);
#2. 调用方法
1.从class中获取方法对象,mclass.getDeclaredMethod(String methodName,Class<?>... parameterTypes),第二个位置为参数列表;
貌似jdk1.8不支持直接获取private类型的field,然后只能用method去取了;在获取set方法时,结果没写参数列表,所以的到的方法时null;:joy:
2.method.invoke(instance,Object... args);第二位置为该方法参数实例,如
method.invoke(instance,1,"圣斗士",5L);
#3. 构造实例
这个monthTask需要你去赋值;即通过获取各种set方法去赋值;各种javaBean都是通过这种方式构造的;
当然MonthTask类必须符合javaBean的标准;
ORM的映射也是通过反射实现的,
#4. 获取元数据(注解)
获取了一个在mclass类上的Entity注解entity的实例,然后通过该entity和mclass在一起将其转化成具体的数据库的table;具体代码缺;
#5. 获取实现的接口
输出会包含 java.lang.List; 因为ArrayList实现了List接口;
可以通过继承的接口来判断该类有什么方法;或者对其进行针对性的操作;
目前是jdk1.8,主要结合此进行;
#1. 获取字段
MonthTask monthTask = monthTaskrep.getOne(mainTaskId + 0L); Class<? extends MonthTask> mclass = monthTask.getClass(); Field field= mclass.getDeclaredField(name); Object val=field.get(monthTask);
根据实例获取class,然后用class的到field,然后通过field来获取结果,常用Field.get(Class的instance),当然还有其他获取值得方法,如Field.getString(instance),Field.getInteger(instance);
#2. 调用方法
Method method =mclass.getDeclaredMethod("getTal" + i + "goal") ;//1 Object o= method.invoke(monthTask);//2
1.从class中获取方法对象,mclass.getDeclaredMethod(String methodName,Class<?>... parameterTypes),第二个位置为参数列表;
貌似jdk1.8不支持直接获取private类型的field,然后只能用method去取了;在获取set方法时,结果没写参数列表,所以的到的方法时null;:joy:
2.method.invoke(instance,Object... args);第二位置为该方法参数实例,如
method.invoke(instance,1,"圣斗士",5L);
#3. 构造实例
Class<? extends MonthTask> mclass = monthTask.getClass(); MonthTask monthTask= mclass.newInstance();
这个monthTask需要你去赋值;即通过获取各种set方法去赋值;各种javaBean都是通过这种方式构造的;
当然MonthTask类必须符合javaBean的标准;
ORM的映射也是通过反射实现的,
#4. 获取元数据(注解)
<A extends Annotation> A getDeclaredAnnotation(Class<A> annotationClass){ } Entity entity= mclass.getDeclaredAnnotation(Entity.class);
获取了一个在mclass类上的Entity注解entity的实例,然后通过该entity和mclass在一起将其转化成具体的数据库的table;具体代码缺;
#5. 获取实现的接口
Class<?> classz=new ArrayList<String>().getClass(); classz=ArrayList.class; Class<?> [] interfaces= classz.getInterfaces()(); for(Class<?> interface:interfaces){ System.out.println(interface.getName()); }
输出会包含 java.lang.List; 因为ArrayList实现了List接口;
可以通过继承的接口来判断该类有什么方法;或者对其进行针对性的操作;
相关文章推荐
- Java反射随记
- AS3中的反射(速记) 分析
- C# 反射(Reflection)的用处分析
- C#通过反射创建自定义泛型
- 通俗易懂的C#之反射教程
- C#根据反射和特性实现ORM映射实例分析
- 深入反射生成数组的详解
- C#利用反射来判断对象是否包含某个属性的实现方法
- C#利用反射技术实现去掉按钮选中时的边框效果
- C#泛型和反射实例解析
- C# Dynamic关键字之:dynamic为什么比反射快的详解
- 传智播客学习之java 反射
- Java 反射之私有字段和方法详细介绍
- php使用反射插入对象示例分享
- java反射使用示例分享
- java利用反射实现动态代理示例
- 用户控件(ASCX)向网页(ASPX)传值使用反射实现
- 基于Java回顾之反射的使用分析
- c#反射调用方法示例
- python反射