java.lang.reflect操作对象属性(域)的值

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 {
        String name = "Demo";
        double salary = 20000.0;
        String nameFieldName = "name";
        String salaryFieldName = "salary";

        // get private Field
        Person person = new Person(name);
        Field field = person.getClass().getDeclaredField(nameFieldName);
        field.setAccessible(true);// 访问控制
        System.out.println(field.get(person));

        person = new Person(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(double salary) {
        super();
        this.salary = salary;
    }

    public Person(String name) {
        super();
        this.name = name;
    }

    public void doubleSalary() {
        this.salary = this.salary * 2;
    }

    @Override
    public String toString() {
        return "Person [name=" + name + ", salary=" + salary + "]";
    }

}

http://www.cnblogs.com/xiaoxiaoyihan/p/4917095.html

时间: 2024-10-12 03:14:47

java.lang.reflect操作对象属性(域)的值的相关文章

利用java.lang.reflect.Constructor动态实例化对象

1 public class Student { 2     private String name; 3     private Integer age; 4     private Student(String name,Integer age){ 5         this.name=name; 6         this.age=age; 7     } 8     public String getName() { 9         return name;10     }11 

含有Date类型属性的实体类转化为JSONArray时报net.sf.json.JSONException: java.lang.reflect.InvocationTargetException

当我们通过session传递数据的时候我通常是: 直接在DAO里从数据库取出含Date类型的数据,而且通常不会将java.sql.Date转为java.util.Date. 这时候前台和后台都不会有任何问题,所以我们以为这样是正常的操作. 但是当我们用JSON传递数据的时候就会发现控制台会报一下错误信息: net.sf.json.JSONException: java.lang.reflect.InvocationTargetException 这时候我们可以再DAO里将java.sql.Dat

java.lang.reflect.Method.getAnnotation()方法示例【通过反射获取到方法对象再获取方法对象上的注解信息】

转: java.lang.reflect.Method.getAnnotation()方法示例 java.lang.reflect.Method.getAnnotation(Class <T> annotationClass)方法如果存在这样的注释,则返回指定类型的元素的注释,否则为null. 声明 以下是java.lang.reflect.Method.getAnnotation(Class <T> annotationClass)方法的声明. public <T exte

Java反射API研究(2)——java.lang.reflect详细内容与关系

对于最新的java1.8而言,reflect中接口的结构是这样的: java.lang.reflect.AnnotatedElement java.lang.reflect.AnnotatedType java.lang.reflect.AnnotatedArrayType java.lang.reflect.AnnotatedParameterizedType java.lang.reflect.AnnotatedTypeVariable java.lang.reflect.Annotated

moon 反射机制---java.lang.reflect包

java反射机制:在运行状态中,对于一个已经加载到JVM的java对象/类 在程序中实现访问.检查.修改.描述java对象本身的信息(构造方法.方法.成员变量.类本身的信息) 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. C++,Java,C#不是动态语言.但是JAVA有着一个非常突出的动态相关机制:Reflection, 反射是java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以再运行时装配,无需在组件之间进行源代码链接. 二,反射机制的作用:

java.lang.reflect.Field

java.lang.reflect.Field 一.Field类是什么 Field是一个类,位于java.lang.reflect包下. 在Java反射中 Field类描述的是 类的属性信息,通俗来讲 有一个类如下: 1 package com.testReflect; 2 public class FieldDemo { 3 public int num1 = 1; 4 protected int num2 = 2; 5 int num3 = 3; 6 private int num4 = 4

JAVA反射系列之Field,java.lang.reflect.Field使用获取方法

JAVA反射系列之Field,java.lang.reflect.Field使用获取方法.   转载https://my.oschina.net/u/1407116/blog/209383 摘要 java.lang.reflect.Field使用 Field. 首先必须明一点 Field类主要是用来辅助获取和操作类的属性的! 1.怎么通过反射获取类的属性 先来看JDK提供的方法有如下几种: a)Class.getDeclaredField(String name);      返回一个 Fiel

java.lang.reflect.Method

java.lang.reflect.Method 一.Method类是什么 Method是一个类,位于java.lang.reflect包下. 在Java反射中 Method类描述的是 类的方法信息,通俗来讲 有一个类如下: 1 package com.testReflect; 2 3 public class MethodDemo { 4 private int num = 2; 5 private String str = "xixi"; 6 7 public int addRes

java.lang.reflect.Constructor

java.lang.reflect.Constructor 一.Constructor类是什么 Constructor是一个类,位于java.lang.reflect包下. 在Java反射中 Constructor类描述的是 类的构造方法信息,通俗来讲 有一个类如下: 1 package com.testReflect; 2 public class ConstructorDemo { 3 private int num; 4 private String str; 5 6 public Con