Java使用PropertyDescriptor獲取實體類中私有屬性的值,並給私有屬性賦值


大家都知道Java類中的私有的(private)屬性是獲取不到的(即使使用繼承依然獲取不到),那如果非要獲取私有屬性的值怎么辦呢?一般的做法是將該java類封裝稱為一個JavaBean,即封裝該私有屬性,提供一對共有的get,set方法來訪問私有屬性。一般情況下都會這樣做!但遇到特殊情況呢?比如,先現有一個需求:訪問一個Java類的私有屬性,並且該類不提供訪問該私有屬性的共有方法!下面就為大家介紹一種方法訪問java類的私有屬性。

 

要獲取java類的私有屬性就不得不先介紹一個類PropertyDescriptor。該類為屬性描述符類。通過該類提供的一系列方法來訪問java類中的私有屬性。

 

 下面看一段代碼:

BeanUtils.java

package yw.javaben;

import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;

/**
 * 獲取私有屬性值JavaBean的幫助類
 * @author yw-tony
 *
 */
public class BeanUtils {
    private PropertyDescriptor dp = null;
    private String propertyName;
    private Object obj;
    /**
     * 構造方法
     * @param objName 屬性名稱
     * @param obj  要操作的對象
     */
    public BeanUtils(String objName,Object obj){
        try{
            this.propertyName = objName;
            this.obj = obj;
            dp = new PropertyDescriptor(propertyName, obj.getClass());
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    /**
     * 獲取javabean私有屬性的值
     * @return
     * @throws Exception
     */
    public Object getProperty() throws Exception {
        //獲取對象屬性方法
        Method method = dp.getReadMethod();
        //獲取屬性對應的值
        Object retValue = method.invoke(obj);
        
        return retValue;
    }
    /**
     * 設置私有屬性的值
     * @param setValue
     * @throws Exception
     */
    public void setProperty(Object setValue) throws Exception {
        Method method = dp.getWriteMethod();
        method.invoke(obj, setValue);
    }
    
    
}

BeanEntity.java

package yw.javaben;

/**
 * 驗證屬性標識符的javabean
 * @author yw-tony
 *
 */
public class BeanEntity {
    private int x;
    private int y = 10;
    public int getX() {
        return x;
    }
    public void setX(int x) {
        this.x = x;
    }
    public int getY() {
        return y;
    }
    public void setY(int y) {
        this.y = y;
    }
    

}

JavaBeanTest.java

public class JavaBeanTest {
    /**
     * 測試JavaBean
     * 
     * @param args
     */
    public static void main(String[] args) throws Exception {
        BeanEntity bean = new BeanEntity();
        String x = "x";//BeanEntity的屬性名稱
        BeanUtils utils = new BeanUtils(x, bean);
        utils.setProperty(12);
        Object value = utils.getProperty();
        System.out.println(value);

    }
}

 

                            


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM