Java反射的一些用法
// 利用反射獲取類的每個屬性 並用屬性名作為KEY 儲存屬性值 到本地 private void saveFileConfig(SettingConfig config) { try { SharedPreferences sharedPreferences = getSharedPreferences(Constants.SETTING_CONFIG, MODE_PRIVATE); SharedPreferences.Editor edit = sharedPreferences.edit(); Class cla = config.getClass(); Field fs[] = cla.getDeclaredFields(); for (int i = 0; i < fs.length; i++) { Field field = fs[i]; field.setAccessible(true); //修改訪問許可權 int value = getValue(field.get(config)); edit.putInt(field.getName(), value); } edit.commit(); } catch (IllegalAccessException e) { Log.e("saveFileConfig ","SharedPreferences save config to local is error"); e.printStackTrace(); } }
通過反射修改私有屬性
private void relfect() { try { //獲取物件的Class Class<?> classType = mViewPager.getClass(); //獲取指定名字的私有域 Field field = null; //屬性名稱 field = classType.getDeclaredField("mOffscreenPageLimit"); //設定壓制訪問型別檢查,只有這樣,才能獲取和設定某個具體類的Field對應的值。 field.setAccessible(true); Log.e("setOff","setOff= "+field.get(mViewPager)); System.out.println(field.get(mViewPager)); //設定私有域的值 field.set(mViewPager, 0); Log.e("setOff","setOff= "+field.get(mViewPager)); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } }