Android 关于model(bean)类的遍历
之前有写过 json和map的遍历 估计大家都知道 现在播出的是model的遍历
首先定义一个model类
public class Model {
private String id;
private int age;
public Model(String id, int age) {
this.id = id;
this.age = age;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
据我所知 String 占用的空间比其他基本类型要大 那么我为什么要用String呢 一般情况下long类型就足够了 但是有时候项目快做完了 老大要在所有的id前面加上不固定的字母 = - = 我为什么要用String 懂了吧
接下来就上遍历的代码 这里只提示重要的
private void test() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
Model model = new Model("abc", 18);
//获取指定类所有的变量的对象数组
Field[] fields = model.getClass().getDeclaredFields();
int length = fields.length;
for (int i = 0; i < length; i++) {
Field field = fields[i];
String key = field.getName();//key表示这个变量的字符串
String type = field.getGenericType().getTypeName();//获取到了key的类型
Logger.e("type = " + type);
String getMethodString = "get" + key.substring(0, 1).toUpperCase() + key.substring(1, key.length());//必须注意 substring 是左开右闭的
if ("int".equals(type)) {
int value = (int) model.getClass().getMethod(getMethodString).invoke(model);
Logger.e("key = " + key + "\tvalue = " + value);
} else if ("java.lang.String".equals(type)) {
String value = (String) model.getClass().getMethod(getMethodString).invoke(model);
Logger.e("key = " + key + "\tvalue = " + value);
}
}
}
这里是自动抛出了异常 小伙伴们想要优雅点可得想想办法了
这里Field和type需要好好注意下 value的值使用反射获取的 最重要的一点是substring区间是左开右闭的 我是很容易忘记这个左开右闭的
代码注释的也很详细 根据需求慢慢封装吧 留下运行后的截图