如何根据字符串动态创建类对象
来源:互联网 发布:那个数据库软件最好 编辑:程序博客网 时间:2024/05/16 19:42
如何根据字符串动态创建类对象
今天跟同事聊天的时候,同事有一个需求,就是如何根据类的名字和值,动态返回该类的实例对象。比如,我们给一个函数传入字符串类名”java.lang.String”和值“wuguowei”,则该函数则返回一个值为“wuguowei”的字符串对象。当然,我们也可以返回Integer对象、Long对象等,该函数可以实现动态的创建对象。
一、 枚举法
由于同事的需求只涉及到基本类型的创建,由于基本对象的个数是有限的(也就那么几个),所以我们这里可以用枚举的方式动态的创建想要的对象,虽然有些繁琐,但是还是可以实现我们的需求的。关键代码如下:
/**
* 根据传入的类名和值,动态构造该类的实例
*
* @param _sClassName
* 要构造的类名 如:java.lang.String
* @param _sRealValue
* 要创建的对象的值,比如“wuguowei”
* @return 返回String对象,即值为“wuguowei”的字符串
* @throws Exception
*/
private Object getAttributeObject(String _sClassName, String _sRealValue)
throws Exception {
//1.加载类对象
Class attrObjClass = Class.forName(_sClassName);
//2.如果是Long类
if (attrObjClass.isInstance(new Long(0))) {
return new Long(_sRealValue);
}
//3.如果是Integer类
if (attrObjClass.isInstance(new Integer(0))) {
return new Integer(_sRealValue);
}
//4.其他类型……
//5.返回当前类的实例对象
return attrObjClass;
}
上面的代码虽然可以通过枚举的方式实现我们的需求,但是很繁琐,需要对每个对象进行枚举,这里还只支持传入一个String类型的参数,如果要传入多个参数,那么这个函数的逻辑将会很复杂。
二、 Constructor反射法
我们应该好好想想,这么NB的java语言应该没这么笨,应该有更简单的方法。经过同事的讨论后,发现一种比较好的方式。就是通过Constructor类反射出对应的类对象,接着再获取指定参数的构造函数,最后根据传入的值实例化对象即可得到我们想要的对象。通过这个方法,我们会发现我们的代码很简单,而且很容易懂。另外,这个方法可以动态构造任何java对象。闲话少说,直接看代码吧。具体代码如下:
/**
* 根据传入的类名和值,动态构造该类的实例
*
* @param _sClassName
* 要构造的类名 如:java.lang.String
* @param _sRealValue
* 要创建的对象的值,比如“wuguowei”
* @return 返回String对象,即值为“wuguowei”的字符串
* @throws Exception
*/
private Object getAttributeObject1(String _sClassName, String _sRealValue)
throws Exception {
// 1. 根据指定的类名,获取到对应的类
Class clazz = Class.forName(_sClassName);
// 2. 获取指定参数类型的构造函数,这里传入我们想调用的构造函数所需的参数类型
Constructor constructor = clazz.getConstructor(String.class);
// 3. 根据构造函数,创建指定类型的对象,传入的参数个数需要与上面传入的参数类型个数一致
Object object = constructor.newInstance(_sRealValue);
// 4.返回对象
return object;
}
三、 执行代码
调用上边的代码如下:
CreateClassByString aCreateClassByString = new CreateClassByString();
Object oObject = aCreateClassByString.getAttributeObject1(
"java.lang.String", "wuguowei");
System.out.println("结果::"+oObject);
执行结果如下:
结果::wuguowei
- 如何根据字符串动态创建类对象
- 如何根据字符串动态创建类对象
- C#如何根据字符串动态的创建对象(类)?
- C#如何根据字符串动态的创建对象(类)
- 根据字符串类名动态创建对象
- 根据字符串类名动态创建对象
- 根据字符串类名动态创建对象
- C # 根据字符串动态的创建对象 类 反射
- 动态机制--根据字符串创建类
- 在.NET上如何根据字符串动态创建控件
- 在.NET上如何根据字符串动态创建控件
- 在.NET上如何根据字符串动态创建控件
- 在.NET上如何根据字符串动态创建控件
- silverlight根据json字符串动态创建实体类
- 根据字符串创建类
- QT根据类名动态创建类对象
- C++实现反射(根据类名动态创建对象)
- php根据字符串类名 动态生成对象
- /C/C++ DLL在其它语言中的调用 结构体/数组 指针
- 说说size_t 和 ptrdiff_t
- 【leetcode】Path Sum II
- HDU1074 Doing Homework
- Log4j使用总结
- 如何根据字符串动态创建类对象
- LCD-DBI接口与DPI接口与DSI接口
- linux操作系统学习网站整理
- GRASP (职责分配原则)
- WPF中使用Free解决访问非UI线程创建的对象抛出的Thread异常
- 如何清理用户的DNS查询结果在本地的缓存
- Unity 3D之ITween函数介绍
- ecshop系统迁移,整站移动,更换空间的问题
- 如何用C#动态编译、执行代码