package net.tooan.ynpay.commons; import java.lang.reflect.Field; import java.security.AccessController; import java.security.PrivilegedAction; import java.util.HashSet; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; /** * Created with IntelliJ IDEA. * User: Jing * Date: 13-10-15 * Time: 下午9:24 */ public class ObjectFieldUtils { private static ConcurrentHashMap<Class<?>, Field[]> FIELD_CACHE_MAP = new ConcurrentHashMap<Class<?>, Field[]>(); public static Field[] getAllField(Object object) { return getAllField(object.getClass()); } public static Field[] getAllField(Class<?> clazz) { Field[] fields = FIELD_CACHE_MAP.get(clazz); if (fields == null) { synchronized (FIELD_CACHE_MAP) { if ((fields = FIELD_CACHE_MAP.get(clazz)) == null) { Set<Field> fieldSet = new HashSet<Field>(); allField(clazz, fieldSet); fields = fieldSet.toArray(new Field[fieldSet.size()]); FIELD_CACHE_MAP.put(clazz, fields); } } } return fields; } private static void allField(Class<?> clazz, Set<Field> fields) { if (clazz == null) { return; } for (Field field : clazz.getDeclaredFields()) { fields.add(field); } allField(clazz.getSuperclass(), fields); } public static void fieldSetAccessible(final Field field) { if (!field.isAccessible()) { if (System.getSecurityManager() != null) { AccessController.doPrivileged(new PrivilegedAction<Object>() { public Object run() { field.setAccessible(true); return null; } }); } else { field.setAccessible(true); } } } }