1. 程式人生 > >Java反射的一些用法

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();         }     }