package com.baidu.disconf.client.support.utils;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.Set;
/**
* 类工具
*
* @author liaoqiqi
* @version 2014-6-11
*/
public class ClassUtils {
/**
* 由Get Method名称获取Field名
*
* @return
*/
public static String getFieldNameByGetMethodName(String methodName) {
int prefixIndex = 0;
// 必须以get或is开始的
if (methodName.startsWith("get")) {
prefixIndex = 3;
} else if (methodName.startsWith("is")) {
prefixIndex = 2;
} else {
return null;
}
String fieldName = methodName.substring(prefixIndex);
if (fieldName.length() >= 1) {
String firstCharStr = String.valueOf(fieldName.charAt(0))
.toLowerCase();
if (fieldName.length() > 1) {
fieldName = firstCharStr + fieldName.substring(1);
} else {
fieldName = firstCharStr.toLowerCase();
}
}
return fieldName;
}
/**
* 根据Field类型设置值
*
* @param field
*/
public static void setFieldValeByType(Field field, Object obj, String value)
throws Exception {
Class<?> type = field.getType();
String typeName = type.getName();
if (typeName.equals("int")) {
if (value.equals("")) {
value = "0";
}
field.set(obj, Integer.valueOf(value));
} else if (typeName.equals("long")) {
if (value.equals("")) {
value = "0";
}
field.set(obj, Long.valueOf(value));
} else if (typeName.equals("boolean")) {
if (value.equals("")) {
value = "false";
}
field.set(obj, Boolean.valueOf(value));
} else if (typeName.equals("double")) {
if (value.equals("")) {
value = "0.0";
}
field.set(obj, Double.valueOf(value));
} else {
field.set(obj, value);
}
}
/**
* 根据Field类型返回值
*
* @param type
* @param value
*
* @return
*
* @throws Exception
*/
public static Object getValeByType(Class<?> type, Object value)
throws Exception {
// 预处理
if (!(value instanceof String)) {
value = "";
}
// trim
String dataValue = (String) value;
dataValue = dataValue.trim();
// process
String typeName = type.getName();
typeName = typeName.toLowerCase();
if (typeName.equals("int") || typeName.equals("java.lang.integer")) {
if (value.equals("")) {
value = "0";
}
return Integer.valueOf(dataValue);
} else if (typeName.equals("long") || typeName.equals("java.lang.long")) {
if (value.equals("")) {
value = "0";
}
return Long.valueOf(dataValue);
} else if (typeName.equals("boolean")
|| typeName.equals("java.lang.boolean")) {
if (value.equals("")) {
value = "false";
}
return Boolean.valueOf(dataValue);
} else if (typeName.equals("double")
|| typeName.equals("java.lang.double")) {
if (value.equals("")) {
value = "0.0";
}
return Double.valueOf(dataValue);
} else {
return value;
}
}
/**
* 获取一个类的所有方法
*
* @param entityClass
*
* @return
*/
public static Set<Method> getAllMethod(Class<?> entityClass) {
// 获取本类的所有的方法
Set<Method> ms = new HashSet<Method>();
for (Method m : entityClass.getMethods()) {
ms.add(m);
}
for (Method m : entityClass.getDeclaredMethods()) {
ms.add(m);
}
// 递归获取父类的所有方法
Class<?> superClass = entityClass.getSuperclass();
if (!superClass.equals(Object.class)) {
Set<Method> superFields = getAllMethod(superClass);
ms.addAll(superFields);
}
return ms;
}
}