package org.ripple.power.ioc; import java.util.Collections; import java.util.HashMap; import java.util.Map; import org.ripple.power.utils.CollectionUtils; public class ClassUtils { final static Map<Object, Object> lazyMap = Collections .synchronizedMap(new HashMap<Object, Object>(1000)); final static private String CLASS_FILE_SUFFIX = ".class"; final static private char PACKAGE_SEPARATOR = '.'; final static private Map<Object, Object> baseTypeMap = CollectionUtils .createMap(9); final static private Map<Object, Object> baseClassMap = CollectionUtils .createMap(9); // 类与对象的对应关系 static { baseClassMap.put(Character.class, Character.TYPE); baseClassMap.put(Integer.class, Integer.TYPE); baseClassMap.put(Long.class, Long.TYPE); baseClassMap.put(Short.class, Short.TYPE); baseClassMap.put(Float.class, Float.TYPE); baseClassMap.put(Boolean.class, Boolean.TYPE); baseClassMap.put(Double.class, Double.TYPE); baseClassMap.put(Byte.class, Byte.TYPE); baseClassMap.put(Void.class, Void.TYPE); } // 对象与类的对应关系 static { baseTypeMap.put(Boolean.TYPE, Boolean.class); baseTypeMap.put(Byte.TYPE, Byte.class); baseTypeMap.put(Character.TYPE, Character.class); baseTypeMap.put(Double.TYPE, Double.class); baseTypeMap.put(Float.TYPE, Float.class); baseTypeMap.put(Integer.TYPE, Integer.class); baseTypeMap.put(Long.TYPE, Long.class); baseTypeMap.put(Short.TYPE, Short.class); baseTypeMap.put(Void.TYPE, Void.class); } final static public String getClassToType(final Object object) { Class<? extends Object> clazz = object.getClass(); Class<?> type = (Class<?>) baseClassMap.get(clazz); return type == null ? clazz.getName() : type.toString(); } final static public Class<?> getTypeToClass(final Class<?> clazz) { return (Class<?>) baseClassMap.get(clazz); } final static public Map<Object, Object> getBaseTypes() { return baseTypeMap; } final public static boolean equals(ClassLoader cl, final ClassLoader other) { while (cl != null) { if (cl == other) { return true; } cl = cl.getParent(); } return false; } public static String getResourcePath(String path, String extension) { if (extension == null) { return path; } extension = "." + extension; if (path.endsWith(extension)) { return path; } return path.replace('.', '/') + extension; } public static String getClassFileName(Class<?> clazz) { String className = clazz.getName(); int lastDotIndex = className.lastIndexOf(PACKAGE_SEPARATOR); return className.substring(lastDotIndex + 1) + CLASS_FILE_SUFFIX; } final static public ClassMethod getFieldInspector(final Class<?> clazz) { Object object = lazyMap.get(clazz); if (object == null) { object = new ClassMethod(clazz, false); lazyMap.put(clazz, object); } return (ClassMethod) object; } }