(1)關於獲取類的字段有兩種方式:getFields()和getDeclaredFields()。
getFields():獲得某個類的所有的公共(public)的字段,包括父類中的字段。
/** * 獲取指定類及其子類的public的字段信息 * @param tempClass */ public static void test1(Class<?> tempClass) { Field[] fields= tempClass.getFields(); for (int i = 0; i < fields.length; i++) { System.out.println(fields[i].getName()); } }
getDeclaredFields():獲得某個類的所有聲明的字段,即包括public、private和proteced,但是不包括父類的申明字段。
/** * 獲取指定類的所有字段信息(包括父類的) * @param tempClass */ public static void test2(Class<?> tempClass) { Field[] fields= tempClass.getFields(); for (int i = 0; i < fields.length; i++) { System.out.println(fields[i].getName()); } }
(2)獲取一個類及其父類的成員變量
獲取一個類及其父類所有的成員變量
/** * 獲取一個類及其父類所有的成員變量 * @param tempClass */ public static void test3(Class<?> tempClass) { List<Field> fieldList = new ArrayList<>(); fieldList.addAll(Arrays.asList(tempClass.getDeclaredFields())); tempClass = tempClass.getSuperclass(); while (tempClass != null && !tempClass.getName().toLowerCase().equals("java.lang.object")) { fieldList.addAll(Arrays.asList(tempClass.getDeclaredFields())); // 得到父類,然后賦給自己 tempClass = tempClass.getSuperclass(); } for (Field f : fieldList) { System.out.println(Modifier.toString(f.getModifiers())+" "+f.getName()+"::"); } }
獲取成員變量的訪問類型(如果我們需要獲取一個類擁有的所有的成員變量,即獲取自己所有的以及繼承的父類的成員變量,那就需要獲取字段的訪問類型)
//獲取字段的訪問級別(1:public,4:protected) int modifier =fields[i].getModifiers(); if(modifier==1 || modifier==4){ fieldList.add(fields[i]); }
獲取指定類所擁有的字段信息
/** * 獲取指定類所擁有的字段信息 * @param tempClass */ public static void test4(Class<?> tempClass) { List<Field> fieldList = new ArrayList<>(); fieldList.addAll(Arrays.asList(tempClass.getDeclaredFields())); tempClass = tempClass.getSuperclass(); while (tempClass != null && !tempClass.getName().toLowerCase().equals("java.lang.object")) { Field[] fields = tempClass.getDeclaredFields(); for (int i = 0; i < fields.length; i++) { // 獲取字段的訪問級別(1:public,4:protected) int modifier = fields[i].getModifiers(); if (modifier == 1 || modifier == 4) { fieldList.add(fields[i]); } } // 得到父類,然后賦給自己 tempClass = tempClass.getSuperclass(); } for (Field f : fieldList) { System.out.println(Modifier.toString(f.getModifiers()) + " " + f.getName() + "::"); } }