java反射用法

来源:互联网 发布:java即时通信 编辑:程序博客网 时间:2024/06/11 03:49

1、获取Class三种方式:

(1)通过class字符串:

Class entityClass = Class.forName("com.loan.back.entity.Article");

(2)通过对象获取:

Class entityClass1=entityObject.getClass();

(3)通过实体类获取

      Class  entityClass1=实体类.class;

2、根据类获取属性

Field[] f = entityClass.getDeclaredFields();

3、获取属性类型

for (Field field : f) {
System.out.println(field.getType().getName());
}

4、创建对象

Object entityObject=entityClass.newInstance();


5、给属性赋值

field.setAccessible(true);field.set(entityObject, Long.parseLong("1"));


6、例子:通过className获取属性,与字典配置的属性以及对应到value进行匹配,赋值给对象,并返回

private Object getObjectFromClassName(String role, String code, String className)throws ClassNotFoundException, InstantiationException, IllegalAccessException {Class entityClass = Class.forName(className);Object entityObject = entityClass.newInstance();Dictionary dic = new Dictionary();dic.setCode(code);List<Dictionary> dicList = dictionaryService.find(dic);for (Dictionary dictionary : dicList) {String dicRole = dictionary.getName();if (dicRole.equals(role)) {String[] propList = dictionary.getDescription().split(",");String[] valueList = dictionary.getValue().split(",");if (propList.length == valueList.length) {Field[] f = entityClass.getDeclaredFields();for (Field field : f) {for (int i = 0; i < propList.length; i++) {if (field.getName().equals(propList[i])) {field.setAccessible(true);switch (field.getType().getName()) {case "java.lang.Long":field.set(entityObject, Long.parseLong(valueList[i]));break;case "java.lang.Integer":field.set(entityObject, Integer.parseInt(valueList[i]));break;case "java.lang.Boolean":if(valueList[i].equals("1")){field.set(entityObject, true);}else{field.set(entityObject, false);}break;default:field.set(entityObject, valueList[i]);break;}}}}}}}return entityObject;}




原创粉丝点击