// 利用反射获取类的每个属性 并用属性名作为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();
}
}