java field, property,variable及getField和getDeclaredField的区别
java 里面的field ,property, attribute,variable的區(qū)別
field: 就是定義的用于保存數(shù)據(jù)的字段
property: property是用于描述類中的特征,所以property比field的含義要廣,因?yàn)樘卣靼姆矫娓訌V,一個(gè)數(shù)據(jù)可以代表某方面的特征,但是并不是所有的特征都是你要的數(shù)據(jù),它可能是類本身的某個(gè)特性的描述。
variable:變量,就是我們平時(shí)看到的變量。
?
綜上:如果你要想通過反射來獲取某個(gè)數(shù)據(jù)模型里面的字段的話跟Field相關(guān),跟其它的沒多大關(guān)系。
getField:獲取某個(gè)類的所有public字段(包含所繼承的類的所有字段)
需要注意的是getField這個(gè)方法有很多的條件限制:在api文檔里面提到了,如果某個(gè)類(這里取名類A),類A中如果不包含public關(guān)鍵字修飾的Field,或類A是一個(gè)數(shù)組類型,原子類型(byte,short,int,long,char,float,double,boolean),無返回值類型的時(shí)候,這個(gè)方法返回的數(shù)組是一個(gè)長度為0的數(shù)組。假如你通過這個(gè)方法得到了要返回的字段了,這些字段是所有它的繼承與實(shí)現(xiàn)的父類,接口,及自身的字段列表。注意public申明的是字段而不是說你的get,set 方法是用public關(guān)鍵字生命的,假如的定義的成員變量 a 這個(gè)字段沒有public申明那么通過這個(gè)方法是取不到的。這里面有一句話蠻難理解的是“類A是一個(gè)數(shù)組類型,原子類型(byte,short,int,long,char,float,double,boolean),無返回值類型的時(shí)候”,它的意思是這個(gè)類型是你對(duì)象申明的類型,數(shù)組類型是 int []這種,而不是說你的類繼承了Array這個(gè)類型。以下舉個(gè)例子就理解了。
private static String[] fieldNamesOfClass(Class aClass){if(aClass == null){
return null;
}
Field fields[] = aClass.getFields();
int length = fields.length;
String fieldNames[] = new String[length];
for (int i=0; i<length; i++){
Field field = fields[i];
fieldNames[i] = field.getName();
}
System.out.printf(fieldNames.toString());
return fieldNames;
} int []xx = new int[3];
String[] xxfieldNames = fieldNamesOfClass(xx);
int yy = 3;
String[] yyfieldNames = fieldNamesOfClass(yy);
getDeclaredField:獲取當(dāng)前類的字段(包含public,protected,private修飾的所有字段,不包含其所繼承類的字段),所以如果你要對(duì)某個(gè)數(shù)據(jù)模型做反射的話要注意里面的字段的定義,不要冗余了
(當(dāng)然你的類或接口里面沒有過申明字段,那么你掉上面那兩個(gè)方法是沒有一點(diǎn)意義的。返回的都是長度為0的數(shù)組)
獲取反射字段的方法是用?getDeclaredField;
轉(zhuǎn)載于:https://www.cnblogs.com/codetime/p/5427288.html
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的java field, property,variable及getField和getDeclaredField的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt的MDI中多个子窗口响应一个菜单事件
- 下一篇: BZOJ2005: [Noi2010]能