主要是反射(基本类型)的一些用法.很少用, 容易忘记, 备忘一下
public class TestUtils {
/**
* 根据指定的类名以及属性字符串名值对构建指定的bean实例.
* @param <T>
* @param clazz
* @param str 形如"includeSkus=true,spuId=143944,queryOrder=desc,startsMin=2009-07-24 12:08:46"这样的字符串
* @return
* @throws Exception
*/
public static <T> T createBean(Class<T> clazz, String str) throws Exception{
T bean = clazz.newInstance();
String[] properties = StringUtils.split(str, ",");
if (properties == null || properties.length == 0) {
return bean;
}
for (String property : properties) {
String[] pair = StringUtils.split(property, "=");
if (pair.length != 2) {
continue;
}
String name = pair[0];
String value = pair[1];
if (StringUtils.equals(value, "null")) {
continue;
}
Class<?> type = PropertyUtils.getPropertyType(bean, name);
Object realValue = null;
// 目前只支持字符串, boolean, 日期, 数字(long, int等)
if (type == null) {
continue;
}
if (type == String.class) {
realValue = value;
}else if (type.isPrimitive() && type == Boolean.TYPE){
realValue = Boolean.valueOf(value);
}else if (Date.class.isAssignableFrom(type)){
realValue = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse(value);
}else if (Number.class.isAssignableFrom(type)) {
realValue = type.getConstructor(String.class).newInstance(value);
}else if (type.isPrimitive()){
if (type == Long.TYPE ) {
realValue = Long.valueOf(value);
}else if (type == Integer.TYPE ) {
realValue = Integer.valueOf(value);
}else if (type == Float.TYPE) {
realValue = Float.valueOf(value);
}else if (type == Short.TYPE) {
realValue = Short.valueOf(value);
}else if (type == Double.TYPE) {
realValue = Double.valueOf(value);
}else {
continue;
}
}else {
continue;
}
PropertyUtils.setProperty(bean, name, realValue);
}
return bean;
}
@Test
public void testBeanPropertyUtils() throws Exception{
TempBean bean = createBean(TempBean.class, "id=1234,includeSkus=true,spuId=143944,queryOrder=desc,startsMin=2009-07-24 12:08:46");
Assert.assertTrue(bean.isIncludeSkus());
Assert.assertEquals(bean.getId(), 1234L);
Assert.assertEquals(bean.getSpuId(), (Long)143944L);
Assert.assertEquals(bean.getQueryOrder(), "desc");
Assert.assertEquals(bean.getStartsMin(), new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse("2009-07-24 12:08:46"));
}
}
分享到:
相关推荐
php根据字符串类名 动态生成对象 经常的需求是,由其他地方获取到一个类的名称,需要生成该类的对象。 可以给目标类定义一个static的方法生成该对象的实例,然后通过call_user_func或call_user_func_array...
“反射”其实就是利用程序集的元...dynamic obj = assembly.CreateInstance(类的完全限定名(即包括命名空间)); // 创建类的实例 2、若要反射当前项目中的类(即当前项目已经引用它了)可以为: Assembly assembly
、指定字符串分割字符串、指定字符串位置获取字符串、过滤SQL中非法字符、检查SQL语句中是否有非法关键字、随机字符串生成、唯一字符串生成、随机数字生成、唯一数字串生成、去除HTML标签、判断是否整型、判断是否...
本软件就会显示出该控件的句柄、标题、类名,以及该控件的父窗口标题、父窗口类名,并且能将上述信息以及获取到的外部程序窗口中指定控件与其顶层窗口的各层级关系和相应的各层级类名与其他窗口属性写入到一个名称为...
/// 10、GetSubStringList(string o_str, char sepeater)把字符串按照指定分隔符装成 List 去除重复 /// 11、GetCleanStyle(string StrList, string SplitString)将字符串样式转换为纯字符串 /// 12、GetNewStyle...
编程命名的规范:类名,属性名,变量名,控件名,自定义控件名规范
带参数:包名 类名@方法名@参数1:参数2:参数3 参数N 方式">本类目前我用于Socket编程中间远程调用Dao类 不过目前仅适用于调用类的参数类型是字符串型的 返回类型必须能被转换为字符串型方法 例 public String ...
php根据字符串类名 动态生成对象 经常的需求是,由其他地方获取到一个类的名称,需要生成该类的对象。 可以给目标类定义一个static的方法生成该对象的实例,然后通过call_user_func或call_user_func_array调用该...
检测系统进程返回所有进程和窗口类名加在一起的字符串 另外字符串加解密19种加密方式 以及文本替换
通过类的名称就可以找到类的对应实例对象,和JAVA中的反射差不多,使用时可能会应为map对象导致错误,正在改正中
因各个项目中需要使用根据字符串计算数值,这里写出一个算法,专门计算字符串。配有大量常用公式。只有一个人方法,直接调用即可。 类名:CustomMath 函数名:Calculations(string value) 说明:求解算式表达式...
qt通过类名动态创建对象
java 通过反射获取枚举类,及枚举类的值,枚举类枚举实例名。本项目为普通java项目
示例代码,教您如何将字符串映射为同名类。
可以获取安卓系统下,所有软件的包名与类名,用于安卓桥接开发很有帮助,是个很不错的安卓脚本开发工具.直接打开即可使用,真机与模拟器均可使用
获取apk包名类名,将apk安装到手机或者模拟器可以获取当前app的包名类名
本软件是编写实现对外部程序进行控制,达到操作自动化的程序的很好辅助...当我们要编写对外部程序进行控制,实现操作自动化的软件时,就需要获得外部程序窗口与窗口中指定控件的各层级类名属性,本软件可以实现此目的。
可以查看android手机上所有程序的包名、类名的一个小app
Ubuntu下的自动获取android包名类名,操作简单。
React类名允许使用指定 className 的纯字符串创建元素目的支持在没有 JSX 的情况下使用 React - 这是一个有趣的库的不幸污点。 使用此模块,您可以非常简洁地呈现只有className结构元素(比 JSX 更是如此)。安装 ...