Java反射获取类的属性值和方法
来源:互联网 发布:在线字体设计软件 编辑:程序博客网 时间:2024/05/17 19:21
Java反射获取类的属性值和方法
结论:
1.获取私有属性与私有方法的时候,需要设置允许访问。
2.获取静态属性与静态方法的时候,不需要给类的实例。
Entity类代码:
public class Entity {private String fieldPrivate;private static String fieldStaticPrivate;public String fieldPublic;public static String fieldStaticPublic;private String operateWithFieldPrivate(){return "operate private method:"+ fieldPrivate;}private static String operateWithFieldStaticPrivate(){return "operate private static method:"+ fieldStaticPrivate;}public String operateWithFieldPublic(){return "operate public method"+fieldPublic;}public static String operateWithFieldStaticPublic(){return "operate public static method"+fieldStaticPublic;}public String hasParameterMethod(String param1,String param2){return "operate hasParameterMethod:"+param1+","+param2;}public String hasChangeableParameterMethod(Object... objects){StringBuilder result=new StringBuilder();for(Object obj:objects){result.append(obj.toString()).append(",");}return "operate hasParameterMethod:"+result;}}
ReflectTest类代码:
import java.lang.reflect.Array;import java.lang.reflect.Field;import java.lang.reflect.Method;public class ReflectTest{public static void main(String[] args) {try{Class clazz=Entity.class;Object entity= clazz.newInstance();//获取变量Field fieldPrivate=clazz.getDeclaredField("fieldPrivate"),fieldStaticPrivate=clazz.getDeclaredField("fieldStaticPrivate"),fieldPublic=clazz.getDeclaredField("fieldPublic"),fieldStaticPublic=clazz.getDeclaredField("fieldStaticPublic");//获取方法Method operateWithFieldPrivate=clazz.getDeclaredMethod("operateWithFieldPrivate"),operateWithFieldStaticPrivate=clazz.getDeclaredMethod("operateWithFieldStaticPrivate"),operateWithFieldPublic=clazz.getDeclaredMethod("operateWithFieldPublic"),operateWithFieldStaticPublic=clazz.getDeclaredMethod("operateWithFieldStaticPublic"),hasParameterMethod=clazz.getDeclaredMethod("hasParameterMethod",new Class[]{String.class,String.class}),hasChangeableParameterMethod=clazz.getDeclaredMethod("hasChangeableParameterMethod",Object[].class);//私有属性fieldPrivate.setAccessible(true);fieldPrivate.set(entity, "fieldPrivate's value");System.out.println(fieldPrivate.get(entity));//静态私有属性fieldStaticPrivate.setAccessible(true);fieldStaticPrivate.set(null, "fieldStaticPrivate's value");System.out.println(fieldStaticPrivate.get(null));//公共属性fieldPublic.set(entity, "fieldPublic's value");System.out.println(fieldPublic.get(entity));//公共静态属性fieldStaticPublic.set(null, "fieldStaticPublic's value");System.out.println(fieldStaticPublic.get(null));//私有方法operateWithFieldPrivate.setAccessible(true);System.out.println(operateWithFieldPrivate.invoke(entity));//私有静态方法operateWithFieldStaticPrivate.setAccessible(true);System.out.println(operateWithFieldStaticPrivate.invoke(null));//公共方法System.out.println(operateWithFieldPublic.invoke(entity));//公共静态方法System.out.println(operateWithFieldStaticPublic.invoke(null));//带固定参数的方法System.out.println(hasParameterMethod.invoke(entity, new String[]{"param1","param2"}));//带可变长度参数的方法1---------等同于数组//使用new Object[]{"param1","param2","param3","param4"},原因是因为编译器会以为//有4个入参,但实际只有一个入参Object[] objects={"param1","param2","param3","param4"};System.out.println(hasChangeableParameterMethod.invoke(entity, new Object[]{objects}));//带可变长度参数的方法2----------等同于数组Object arrayObj = Array.newInstance(Object.class, 4); Array.set(arrayObj, 0, "param1"); Array.set(arrayObj, 1, "param2"); Array.set(arrayObj, 2, "param3"); Array.set(arrayObj, 3, "param4"); System.out.println(hasChangeableParameterMethod.invoke(entity, arrayObj)); }catch(Exception e){e.printStackTrace();}}}
结果:
fieldPrivate's valuefieldStaticPrivate's valuefieldPublic's valuefieldStaticPublic's valueoperate private method:fieldPrivate's valueoperate private static method:fieldStaticPrivate's valueoperate public methodfieldPublic's valueoperate public static methodfieldStaticPublic's valueoperate hasParameterMethod:param1,param2operate hasParameterMethod:param1,param2,param3,param4,operate hasParameterMethod:param1,param2,param3,param4,
0 0
- Java反射获取类的属性值和方法
- Java反射机制获取/调用类的属性和方法
- java反射获取类的属性名和属性值
- Java反射之获取私有公共的属性和方法
- Java反射获取类的属性值
- Java 使用反射获取类、方法、属性上的注释
- JAVA反射获取属性注解,类方法
- java反射机制,获取类,属性,方法
- 通过反射获取类的所有属性和方法
- 反射获取类属性和方法的调用
- 反射获取属性和方法
- Java通过反射获取和设置对象的属性值
- java反射应用-获取对象自身的属性和值
- Java中用反射的方式获取类中的所有属性和方法,以及获取属性的默认值,设置属性的默认值
- Java中用反射的方式获取类中的所有属性和方法,以及获取属性的默认值,设置属性的默认值
- java通过反射机制取类的属性和方法
- java 通过反射机制得到类的属性和方法
- java 通过反射获得类的属性和调用方法
- eclpise热加载,不用重启tomcate
- spring-mvc最小化配置,最简单入门。
- java.lang.RuntimeException: Parcelable encountered IOException writing serializable object
- POJ 3278(BFS)
- iOS BSD socket编程
- Java反射获取类的属性值和方法
- 利用c语言代码打印一个心形(带立体感)
- rsyncd 同步
- 如何创建UIlabel,使label的高度随着内容的多少而变动并且可以设置行间距?
- Java提高篇(二八)------TreeSet
- 论文中的定理(Theorem)、引理(Lemma)、推论(Corollary)
- C++内存布局一
- 倒计时
- mysql 常用命令