标签:access string类 close 比较 open tcl blog ini static
测试类:
public class Test01 { private String name; private String sex; private Long num; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Long getNum() { return num; } public void setNum(Long num) { this.num = num; } }
1、获取对象字段
public class Test05 { public static void main(String[] args) { List<String> fieldList = getClassFields(new Test01().getClass()); for (String field : fieldList) { System.out.println(field); } } /** * 获取字段列表 * @param clazz 类 * @return */ private static List<String> getClassFields(Class<?> clazz){ Field[] fieldArr = clazz.getDeclaredFields(); List<String> fieldList = new ArrayList<String>(); for (Field field : fieldArr) { fieldList.add(field.getName()); } return fieldList; } }
运行main方法结果:
2、字段类型
/** * 测试字段类型 */ private static void testFieldType(Class<?> clazz){ Field[] fieldArr = clazz.getDeclaredFields(); for (Field field : fieldArr) { System.out.println(field.getType()); } }
测试结果:
3、字段类型比较
/** * 测试字段类型 */ private static void test03(Class<?> clazz){ Field[] fieldArr = clazz.getDeclaredFields(); for (Field field : fieldArr) { if(field.getType().equals(Long.class)) System.out.println("Long类型,字段:"+field.getName()); else if(field.getType().equals(String.class)) System.out.println("String类型,字段:"+field.getName()); } }
运行结果:
4、获取类指定字段值
/** * 获取字段值, get方法 * @param thisClass 类 * @param fieldName 字段名 * @return */ private static Object getFieldValue(Object thisClass, String fieldName) { Object value = new Object(); Method method = null; try { String methodName = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); method = thisClass.getClass().getMethod("get" + methodName); value = method.invoke(thisClass); } catch (Exception e) { e.printStackTrace(); } return value; }
/** * 测试指定字段值 * @param clazz */ private static void test05(Object obj, String[] fieldArr){ for (String fieldName : fieldArr) { System.out.println("字段:"+ fieldName +", 值:"+ getFieldValue(obj, fieldName)); } }
public static void main(String[] args) { Test01 test = new Test01(); test.setName("1"); test.setSex("2"); test.setNum(1000L); String[] fieldArr = new String[]{"name", "sex", "num"}; test05(test, fieldArr); }
运行结果:
5、通过反射设置值
/** * 测试反射设置属性 * @param obj */ private static Object test06(Object obj) throws Exception{ Class<?> clazz = obj.getClass(); // 类 Field[] fieldArr = clazz.getDeclaredFields(); Object clazzInstance = clazz.newInstance(); // 实例化对象 for (Field field : fieldArr) { field.setAccessible(true); // 设置些属性是可以访问的 String fieldName = field.getName(); // 字段名称 Class<?> fieldType = field.getType(); // 字段类型 if (fieldType == Long.class) // long类型只能set数字,不然报错 field.set(clazzInstance, 88888L); else if (fieldType == String.class) field.set(clazzInstance, "我是属性【"+ fieldName +"】"); } return clazzInstance; }
public static void main(String[] args) throws Exception { Object obj = test06(new Test01()); Test01 test = (Test01) obj; System.out.println("name: "+ test.getName() +", sex: "+ test.getSex() +", num: "+ test.getNum()); }
运行结果:
大武汉,赶最后一班地铁去喽。 。。 香港路转范湖,范湖转光谷,漫长。。。。。
标签:access string类 close 比较 open tcl blog ini static
原文地址:http://www.cnblogs.com/frank-quan/p/5998527.html