java.lang.reflect操作对象属性(域)的值
2015-10-28 22:09
417 查看
package reflect; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /*2015-10-28*/ public class RefactorDemo { /** * @param args * @throws NoSuchFieldException * @throws SecurityException * @throws IllegalAccessException * @throws IllegalArgumentException * @throws NoSuchMethodException * @throws InvocationTargetException */ public static void main(String[] args) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, InstantiationException { String name = "Demo"; double salary = 20000.0; String nameFieldName = "name"; String salaryFieldName = "salary"; Constructor<?>[] constructors = Person.class.getConstructors(); for (Constructor<?> constructor : constructors) { Class<?>[] parameterTypes = constructor.getParameterTypes(); for (Class<?> parameterType : parameterTypes) { System.out.println(parameterType.getName()); } } System.out.println("===================================="); //constructor // 这个地方需要关注:如果是基本类型,就是double.class,不是Double.class Constructor<Person> constructor = Person.class.getConstructor(String.class, double.class); Person tom = constructor.newInstance("Tom", 3000000.0); System.out.println(tom); // get private Field Person person = new Person(name, salary); Field field = person.getClass().getDeclaredField(nameFieldName); field.setAccessible(true);// 访问控制 System.out.println(field.get(person)); person = new Person(name, salary); field = person.getClass().getDeclaredField(salaryFieldName); field.setAccessible(true); System.out.println(field.getDouble(person)); // set private Field person = new Person(); field = person.getClass().getDeclaredField(nameFieldName); field.setAccessible(true); field.set(person, name); field = person.getClass().getDeclaredField(salaryFieldName); field.setAccessible(true); field.setDouble(person, salary); System.out.println(person); // process method person = new Person(); field = person.getClass().getDeclaredField(salaryFieldName); field.setAccessible(true); field.setDouble(person, 100000.9); Method method = person.getClass().getDeclaredMethod("doubleSalary"); method.invoke(person); System.out.println(field.getDouble(person)); } } class Person { private String name; private double salary; public Person() { super(); } public Person(String name, double salary) { super(); this.name = name; this.salary = salary; } public void doubleSalary() { this.salary = this.salary * 2; } @Override public String toString() { return "Person [name=" + name + ", salary=" + salary + "]"; } }
Output:
java.lang.String double ==================================== Person [name=Tom, salary=3000000.0] Demo 20000.0 Person [name=Demo, salary=20000.0] 200001.8
相关文章推荐
- 【JAVA核心技术卷一】Inner Class内部类&Proxy代理
- SpringMVC 过滤器Filter使用解析
- Eclipse汉化
- Spring中的字符编码过滤器
- 自己写一个java.lang.reflect.Proxy代理的实现
- Java基础(10):泛型
- 关于Android Studio 中快捷键 相当于 Eclipse中 Alt+/ 怎么设置
- Java学习——2——对象操作
- Java:装饰设计模式
- java.lang.NoClassDefFoundError: [Lorg/hibernate/engine/FilterDefinition
- Java:编码的详解
- spring使用dwr异步通信
- Java堆栈详解
- Java Collections.EMPTY_LIST 和 Collections.emptyList()的区别
- eclipse使用手册:字体大小调节
- 【NOJ】(Java)斐波那契数列
- spring里面的bean到底是什么鬼
- java中的static关键字
- java Io 全解
- struts2基于xml配置文件的用户验证方法