当前位置: 首页 > 工具软件 > JBean > 使用案例 >

JBeanClass

周博达
2023-12-01
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

/**
 * @author tl
 * @version [版本号, 2010-11-4]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
public class JBeanClass
{
	// 所支持的类型
	private static List<String> supportType = new ArrayList<String>();

	private static final int FIX_NUMBER2 = 2;

	private static final int FIX_NUMBER3 = 3;

	private static final int FIX_NUMBER4 = 4;

	static
	{
		supportType.add("byte");
		supportType.add("java.lang.Byte");
		supportType.add("short");
		supportType.add("java.lang.Short");
		supportType.add("int");
		supportType.add("java.lang.Integer");
		supportType.add("long");
		supportType.add("java.lang.Long");
		supportType.add("java.lang.BigInteger");
		supportType.add("float");
		supportType.add("java.lang.Float");
		supportType.add("double");
		supportType.add("java.lang.Double");
		supportType.add("char");
		supportType.add("boolean");
		supportType.add("java.lang.Boolean");
		supportType.add("java.lang.String");
		supportType.add("java.lang.Character");
	}

	/**
	 * 添加方法说明
	 */
	public JBeanClass()
	{
	}

	/**
	 * 根据对象获取对象所有属性
	 * @param entityName
	 * @return
	 * @throws Exception
	 */
	public static Field[] getProperts(Object entityName) throws Exception
	{
		Field field[] = entityName.getClass().getDeclaredFields();
		StringBuffer sb = new StringBuffer();
		for (Field f : field)
		{
			sb.append(f.getName()).append(" : ").append(getGetterMethodInvokeValue(entityName, f.getName())).append("\n");
		}
		Log.getLogger().info("getPropertyString : " + sb.toString());
		return field;
	}

	/**
	 * 获取getter方法的执行结果
	 * @param entity 方法所属的实体
	 * @param methodName 要执行的方法名
	 * @return 执行结果
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public static Object getGetterMethodInvokeValue(Object entity, String methodName)
	{
		methodName = "get" + CommonTools.createFirstCharToUpperCase(methodName);
		return getMethodInvokeValue(entity, methodName, null, null);
	}

	/**
	 * 获取方法的执行结果
	 * @param entity 方法所属的实体
	 * @param methodName 要执行的方法名
	 * @return 执行结果
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public static Object getMethodInvokeValue(Object entity, String methodName, Class[] paramType, Object[] paramValue)
	{
		try
		{
			Class c = entity.getClass();
			Method method = c.getMethod(methodName, paramType);
			return method.invoke(entity, paramValue);
		}
		catch (Exception e)
		{
			Log.getLogger().error("can't find method " + methodName + " in " + entity, e);
		}
		return null;
	}

	/**
	 * 从getter方法名称中获取属性的名称
	 * @param methodName 方法名称
	 * @return String 方法对应的属性名
	 */
	public static String getPropertyName(String methodName)
	{
		String propertyName = null;
		// 截取方法名"get"字符串后的所有字符 将获取的字符串首字母小写作为返回的属性名称
		if (methodName.length() > FIX_NUMBER3)
		{
			propertyName = methodName.substring(FIX_NUMBER3, FIX_NUMBER4).toLowerCase(Locale.ENGLISH) + methodName.substring(FIX_NUMBER4);
		}
		return propertyName;
	}

	/**
	 * 获取方法对象的返回值类型
	 * @param method 方法对象
	 * @return String 方法对象的返回值的类型
	 */
	public static String getMethodReturnType(Method method)
	{
		String type = null;
		if (method != null && method.getReturnType() != null)
		{
			type = method.getReturnType().getName();
		}
		return type;
	}

	/**
	 * 获取Set方法对象的第一个参数的类型
	 * @param method 方法对象
	 * @return String 方法对象的第一个参数的类型
	 */
	public static String getSetterMethodFirstParameterType(Method method)
	{
		String type = null;
		if (method != null && method.getParameterTypes().length >= 1)
		{
			type = method.getParameterTypes()[0].getName();
		}
		return type;
	}

	/**
	 * 设置对象指定名称的参数值
	 * @param entity 要操作的对象
	 * @param propertyName 属性名
	 * @param value 要设置的属性值
	 * @return Object 设置后的对象
	 * @throws java.lang.Exception Exception异常
	 */
	@SuppressWarnings("unchecked")
	public static Object setPropertyValueFromString(Object entity, String propertyName, String value) throws Exception
	{
		// 检查参数的有效性
		if ((null == entity) || (null == propertyName) || propertyName.equals("") || (null == value) || value.equals(""))
		{
			return entity;
		}

		propertyName = "set" + CommonTools.createFirstCharToUpperCase(propertyName);
		Method method = getMethod(entity, propertyName);
		if (null == method)
		{
			Log.getLogger().error("can't find method " + propertyName + " in " + entity, null);
		}

		String paramType = getSetterMethodFirstParameterType(method);

		// 复杂度太高,拆分成二个函数
		Object[] params = createParamsNumType(paramType, value);
		if (null == params)
		{
			params = createParamsOther(paramType, value);
		}
		if (params != null)
		{
			method.invoke(entity, params);
		}
		else
		{
			Log.getLogger().error("setPropertyValueFromString parametertype(" + paramType + "," + value + ")not supported。", null);
		}
		return entity;
	}

	/**
	 * 根据方法名获取方法 如果有多个同名的方法,函数只会随机取一个返回
	 * @param obj 要获取方法所在的类
	 * @param methodName 方法的名字
	 * @return 对应的方法
	 */
	public static Method getMethod(Object obj, String methodName)
	{
		Method[] methods = obj.getClass().getMethods();
		// 遍历所有的方法对象,获取所有的符合标准JAVA BEANS规范的setter方法对象集合
		for (int i = 0; i < methods.length; i++)
		{
			if (methods[i].getName().equals(methodName))
			{
				return methods[i];
			}
		}
		return null;
	}

	/**
	 * 根据参数类型和参数值,将参数值转换成指定类型的数据返回
	 * @param paramType
	 * @param value
	 * @return
	 */
	private static Object[] createParamsNumType(String paramType, String value)
	{
		Object[] params = null;
		if (paramType.equals("java.lang.Byte") || paramType.equals("byte"))
		{
			String ss = value;
			if (ss.length() <= FIX_NUMBER2)
			{
				params = new Byte[1];
				params[0] = Byte.valueOf(ss);
			}
		}
		else if (paramType.equals("java.lang.Short") || paramType.equals("short"))
		{
			params = new Short[1];
			params[0] = Short.valueOf(value);
		}
		else if (paramType.equals("java.lang.Integer") || paramType.equals("int"))
		{
			params = new Integer[1];
			params[0] = Integer.valueOf(value);
		}
		else if (paramType.equals("java.lang.Long") || paramType.equals("long"))
		{
			params = new Long[1];
			params[0] = Long.valueOf(value);
		}
		else if (paramType.equals("java.lang.Float") || paramType.equals("float"))
		{
			params = new Float[1];
			params[0] = Float.valueOf(value);
		}
		else if (paramType.equals("java.lang.Double") || paramType.equals("double"))
		{
			params = new Double[1];
			params[0] = Double.valueOf(value);
		}
		return params;
	}

	/**
	 * 根据参数类型和参数值,将参数值转换成指定类型的数据返回
	 * @param paramType
	 * @param value
	 * @return
	 */
	private static Object[] createParamsOther(String paramType, String value)
	{
		Object[] params = null;
		if (paramType.equals("java.lang.String"))
		{
			params = new String[1];
			params[0] = value;
		}
		else if (paramType.equals("java.lang.Character") || paramType.equals("char"))
		{
			String ss = value;
			if (ss.length() == 1)
			{
				params = new Character[1];
				params[0] = Character.valueOf(ss.charAt(0));
			}
		}
		else if (paramType.equals("java.lang.Boolean") || paramType.equals("bool"))
		{
			params = new Boolean[1];
			params[0] = Boolean.valueOf(value);
		}
		return params;
	}
}

 

 类似资料:

相关阅读

相关文章

相关问答