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);
}
}
相關推薦
Java使用PropertyDescriptor獲取實體類中私有屬性的值,並給私有屬性賦值
大家都知道Java類中的私有的(private)屬性是獲取不到的(即使使用繼承依然獲取不到),那如果非要獲取私有屬性的值怎麼辦呢?一般的做法是將該java類封裝稱為一個JavaBean,即封裝該私有屬性,提供一對共有的get,set方法來訪問私有屬性。一般情況下都會這樣做
Java使用PropertyDescriptor獲取實體類中私有屬性的值,並給私有屬性賦值!
下面看一段程式碼:BeanUtils.javapackage yw.javaben; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; /** * 獲取私有屬性值JavaBean的幫助類 * @author y
利用反射獲取實體類中的私有屬性
平時接並沒有怎麼接觸反射,今天遇到了,就記錄下來把 我的檔案結構 說明:1.Student.java是實體類,裡面是一些私有的屬性欄位 2.FanSheUtil.java是整個的核心類, 3.Demo.java 是測試類 步驟: 1.建立一個Studen
java中獲取實體類中的get、set方法名
/** * java反射bean的get方法 * * @param objectClass * @param fieldName * @return */ @Suppr
java反射獲取字段的屬性值,以及為字段賦值等方法
通過 獲取 首字母 color als 遍歷 方法 access col 1.獲取某個類的屬性值 1 /*利用getter方法獲取值(首字母大寫) 2 CjJssetDTO obj; 3 */ 4 String filed
C++中的建構函式,拷貝建構函式和賦值函式
一.建構函式 1.首先說明一下空類: 對於空類,編譯器會自動加入: 預設建構函式,拷貝建構函式,賦值建構函式,解構函式和取值函式 擴充:空類的大小為1.(因為每個例項在記憶體中都有獨一無二的地址,為了達到這個目的,編譯器往往會給空類增加一個位元組) 2
獲取easyui-datagrid中選中的資料,並遍歷得到目標資料
//id和title是我想要的資料 var docData = $('#grid').datagrid('getChecked'); var arr = new Array(); for(var
java跨方法傳遞物件引用變數,並對該變數賦值引起的問題
關於物件引用做方法引數問題,在java中 基本型別變數做引數傳另外一個方法中重新賦值時,會重新在棧中複製一份,物件引用也是一樣,如 public methodA(){ int i = 0; method
linux中查詢使用者狀態,並給已鎖使用者解鎖
1、首先如果當前是root使用者,那麼先切換到oracle使用者,然後開啟sqlplus,並且賦予dba角色。 [[email protected] ~]$ sqlplus /nolog
ExtJs4中gird列中增加操作列,並給操作按鈕繫結事件
在ExtJs4中,grid元件有Ext.grid.column.Action元件,所有要增加操作列,只需指定列的xtype為actioncolumn即可,例如: Ext.create('Ext.grid.Panel', { renderTo: Ext.getBody
在cell上新增長按手勢,並給手勢新增tag值
1、在cell上新增長按手勢; UILongPressGestureRecognizer *longPressGR = [[UILongPressGestureRecognizeralloc]
通過隨機數獲得學生成績,並把每個元素賦值為學生的分數成績,通過增強for循環遍歷結果。
() nbsp sco math i++ oid 學生 length pac package com.Summer_0419.cn; /** * @author Summer * 通過隨機數獲得學生成績,並把每個元素賦值為學生的分數成績 */ pub
C# 反射修改私有靜態成員變數 反射獲取修改類中的屬性值
//動態連結庫中ClsPublic類有一變數 private static string key="1111";//下面通過反射的技術修改和獲取值//設定key public static void updatePalmKey(string key = "t
java 獲取實體類的屬性值
List<EntryVO> indexEntryList = service.getIndexEntryVOList(); List<EntryVO> personalList = new ArrayList<>();
spring aop 獲取攔截類中的屬性的值
最近搭建一個ssh的通用架子時,想做個通用日誌的攔截方法,可以利用反射獲取攔截類中的屬性 不多說,上程式碼 日誌類 public class MyLog { public void doBefore(JoinPoint jp) throws SecurityExcepti
Java中通過例項得到實體類中的屬性和屬性值
方式一(實體類):1234567//java中遍歷實體類,獲取屬性名和屬性值public static void testReflect(Object model) throws Exception{for (Field field : model.getClass().ge
java中從實體類中取值會忽略的的問題
spa get pos val light 原因 blog 方法 什麽 在我們java Map中通過get來取值時會忽略的問題是:如果取得一個空值null時,那麽.toString()時就會出錯,而且不知道是什麽原因。 現在我給的具體方法是用條件表達式先判斷一下。 例:
resultMap自定義映射---8.3.1. 解決列名(表中的字段名稱)和實體類中的屬性名不一致
lec per 編寫 動態代理 參數類型 ID res HERE 用戶 1.1.1.1. 步驟一:將駝峰匹配註釋掉 --------------測試完成後仍然 回來開啟 其他地方可能用到 一旦註釋掉駝峰匹配,那麽再通過queryUserById查詢的結果中,用戶
freemarker獲取封裝類中物件的屬性
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
【java學習筆記】MyBatis中當實體類中的屬性名和表中的欄位名不一樣時的解決方法
在使用MyBatis開發DAO層時,當實體類中的屬性名和表中的欄位名不一樣時,查詢出來的值為null,此時有3種解決方法 解決方法1 在Mapper.xml對映檔案中,寫SQL語句時起別名 解決