java反射獲取屬性值
① java中如何實現private反射獲得對象欄位值的
背景介紹:在一個Bean類中,需要通過反射機制獲得private欄位屬性時,如果用通常獲得步驟獲得會報如下錯誤: java.lang.IllegalAccessException: Class Test can not access a member of class Bean with modifiers "private" at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:57) at java.lang.reflect.Field.doSecurityCheck(Field.java:811) at java.lang.reflect.Field.getFieldAccessor(Field.java:758) at java.lang.reflect.Field.get(Field.java:228) 解決如下代碼實現代碼: 1.Bean.class內容如下: public class Bean { private String aa;} 2.Test.class內容如下: public class Test { public static void main(String[] args) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException { Bean test = new Bean(); Field f = Bean.class.getDeclaredField("aa"); //其中,最關鍵的代碼是: //f.setAccessible(true); //這行代碼把對象data上的name欄位設置為public訪問屬性. f.setAccessible(true); System.out.println(f.get(test)); System.out.println(f.get(test));}}運行Test類輸出如下:nullt2
② java中如何通過反射獲取類的屬性
簡單的方法如下來:自
Class<?> cls=Class.forName(className);////////////////////////通過類的名稱反射類
Object obj=cls.newInstance();//////////////////////對象實例化
Field field=cls.getField(fieldName);/////這個對應的是屬性
fieldValue=field.get(obj);////這個就是屬性的值
③ java 通過反射怎麼獲取方法中參數值
答案是沒法獲取。
首先反射獲取的是類、屬性、或者方法的定義內,就拿方法來說,方法的定義是什容么呢?
方法的定義包括:方法名,方法的參數類型列表,方法的返回值類型。
方法的參數類型列表包括什麼呢?
包括每個參數的順序和參數類型。
參數值是什麼?是在這個方法被調用的時候傳入的參數叫做參數值。反射呢,是獲取的它的定義,並不牽扯調用,所以說沒法獲取。
④ 怎樣通過反射獲得一個類的屬性值或者方法返回值
Class<?> obj=Class.forName(ref.getClass().getName());
Object object = obj.newInstance();
Method method=obj.getMethod("getLength");
你這樣拿到的是你newInstance新構建的對象,又不是你之前設定內了值的對象,域當然容會是0.
應該是這樣:method.invoke(ref)
⑤ 如何通過Java反射獲取一個類屬性的類型要類型Class<
不是類型,Class在java.lang 同過不同的方法(4種)來動態的獲取你所需要的類或介面
⑥ 如何利用java的反射機制動態的取得對象的屬性
Java.lang.Class
getDeclaredFields()
返回抄 Field 對象的一個數組,這些對象反映此 Class
對象所表示的類或介面所聲明的所有欄位。
Java.lang.reflect.Field
getName()
返回此 Field 對象表示的欄位的名稱。
getGenericType()
返回一個 Type 對象,它表示此 Field 對象所表示欄位的聲明類型。
以上是jdk裡面的一些用法,就是用你想要獲取對象的屬性得到它的class 然後調用 getDeclaredFields()就可以得到欄位數組了。
然後再用下面的方法就可以得到屬性名,類型這一些。
很簡單,要想實現現復雜的功能就再找一下api 找出相應的方法。
⑦ java怎麼通過反射得到屬性的類型
Class<?>cls=Class.forName(className);//通過類的名稱反射類
Objectobj=cls.newInstance();//對象實例化
Fieldfield=cls.getField(fieldName);//這個對應的是屬性專
fieldValue=field.get(obj);//這個就是屬屬性的值
⑧ java反射取對象屬性值 不是通過get方法取值
反射不是通過get取值的,是通過該對象的信息,比如說名稱、內存地址等來訪問類,內方法,屬性等,容可以獲取任意對象的信息,但不能獲得私有屬性(private String s=「sd」;)的值,切記
推薦《JAVA核心技術》這本書會對你有幫助的
⑨ java怎樣通過反射機製取javabean的屬性值和方法
用hibernate逆向工程。在myeclipse中選擇myeclipse database Explorer 然後連接你的資料庫,然後選擇你要反射的表內選擇hibernate reverse engineering就可以了。容
⑩ java反射獲取一個實體類中的另外一個實體類中屬性的值,兩個實體類是關聯關系。
class Test{
public static void main(String[] args) {
A a = new A();
System.out.println(getValueInField(a,"b1","i"));
System.out.println(getValueInField(a,"b2","i"));
System.out.println(getValueInField(a,"b3","i"));
}
public static Object getValueInField(Object obj,String field,String name){
//三個參數分別是外部的類的對象,作為成員屬性的類的引用名,要查詢的類內部的屬性名
try {
Object o = obj.getClass().getDeclaredField(field).get(obj);
return o.getClass().getDeclaredField(name).get(o);
} catch (Exception e) {
System.out.println("查找失敗");
return null;
}
}
}
class A{
B b1 = new B(1);
B b2 = new B(2);
}
class B{
int i;
B(int i){
this.i = i;
}
}