`
mikey.tsu
  • 浏览: 133816 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类

JBeanClass

阅读更多
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;
	}
}

 

分享到:
评论

相关推荐

    pocketsphinx-0.1.15-cp34-cp34m-win32.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    【java毕业设计】书画拍卖网站源码(ssm+mysql+说明文档).zip

    环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上 服务器:tomcat7及以上

    【java毕业设计】“星辰”旅行分享系统源码(ssm+mysql+说明文档).zip

    环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上 服务器:tomcat7及以上

    Pillow-9.1.1-cp38-cp38-win_amd64.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    pocketsphinx-0.1.15-cp36-cp36m-win_amd64.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    HUAWEI iMaster NCE ²úÆ·²ÊÒ³_V100R019C00 01.pdf

    HUAWEI iMaster NCE ²úÆ·²ÊÒ³_V100R019C00 01.pdf

    Pillow_SIMD-9.0.0.post0-cp37-cp37m-win32.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    【java毕业设计】家用电器销售网站源码(ssm+mysql+说明文档+LW).zip

    功能说明: 设计开发了具有管理员;个人中心、用户管理、商品分类管理、品牌管理、商品信息管理、订单评价管理、留言板管理、系统管理、订单管理,用户;个人中心、订单评价管理、我的收藏管理、订单管理,前台首页;首页、商品信息、商品资讯、留言反馈、我的、跳转到后台、购物车等功能的家用电器销售网站。 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上 服务器:tomcat7及以上

    中国2012-2022年各地区新质生产力水平测算数据(王珏版)【重磅,更新!】

    1、资源内容地址:https://blog.csdn.net/abc6838/article/details/143838732 2、数据特点:今年全新,手工精心整理,放心引用,数据来自权威,且标注《数据来源》,相对于其他人的控制变量数据准确很多,适合写论文做实证用 ,不会出现数据造假问题 3、适用对象:大学生,本科生,研究生小白可用,容易上手!!! 4、课程引用: 经济学,地理学,城市规划与城市研究,公共政策与管理,社会学,商业与管理

    preshed-3.0.2-cp35-cp35m-win_amd64.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    param-1.12.2-py2.py3-none-any.whl.rar

    PartSegCore_compiled_backend-0.12.0a0-cp36-cp36m-win_amd64.whl.rar

    【java毕业设计】高校物资采购管理系统源码(ssm+mysql+说明文档+LW).zip

    功能说明: 系统主要包括个人中心,供应商管理,学院管理,公告信息管理,采购信息管理,采购信息管理,招标信息管理,投标信息管理,中标通知管理等功能模块。 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上 服务器:tomcat7及以上

    redis7.4镜像docker包

    redis7.4镜像docker包

    中国分省分产业碳排放数据(绿色系列之一).zip

    中国分省分产业碳排放数据(绿色系列之一).zip

    peewee-3.15.0-cp39-cp39-win32.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    Pillow-8.3.2-cp39-cp39-win32.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    基于Scrapy+Elasticsearch+Django搭建的分布式电影搜索.zip

    基于Scrapy+Elasticsearch+Django搭建的分布式电影搜索.zip

    汉语言文学 4.pdf

    汉语言文学 4.pdf

    【java毕业设计】交通事故档案管理系统源码(ssm+mysql+说明文档+LW).zip

    功能说明: 使用交通事故档案管理系统分别为管理员和用户两个权限子模块。 管理员所能使用的功能主要有个人中心、用户管理、部门信息管理、警察信息管理、事故类型管理、事故信息管理、档案类型管理、档案信息管理、申诉信息管理等。 用户可以实现个人中心、警察信息管理、事故信息管理、申诉信息管理等。 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上 服务器:tomcat7及以上

    yolo算法-红外图像疲劳驾驶数据集-2000张图像带标签.zip

    yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值

Global site tag (gtag.js) - Google Analytics