java用字符串动态创建对象

PublicDocDispatchpo=(PublicDocDispatch)objectDao.getBySql(PublicDocDispatch.class.get... PublicDocDispatch po = (PublicDocDispatch) objectDao.getBySql(
PublicDocDispatch.class.getSimpleName(),
"where processId=" + piID);
其中PublicDocDispatch是一个实体类名,现在情况是PublicDocDispatch是动态的,我从一个XML配置文件中获得,也有可能是别的类名,我从XML能读出某个类名的字符串,比如我可以读出String a="PublicDocDispatch ",请问我该如何根据a得到po对象呢?
展开
 我来答
千锋教育
2015-10-20 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
展开全部
/**
* 根据传入的类名和值,动态构造该类的实例
*
* @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;
}
匿名用户
2013-05-09
展开全部
类似这样动态创建对象的,都是用到JAVA的反射机制来实现的,有时间去研究一下吧。给个代码。try {
Class c =Class.forName("java.lang.String");
String s = (String)c.newInstance();
System.out.println(s.getClass().getName());
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-05-09
展开全部
可以自己写个工厂
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
趣事情
2015-10-28 · 知道合伙人互联网行家
趣事情
知道合伙人互联网行家
采纳数:517 获赞数:5452
电脑技术,软件开发。移动开发。网站建设相关专业知识。都可以提供解答和相关技术指导。

向TA提问 私信TA
展开全部
一、 枚举法
由于涉及到基本类型的创建,由于基本对象的个数是有限的,所以我们这里可以用枚举的方式动态的创建想要的对象,关键代码如下:

/**

* 根据传入的类名和值,动态构造该类的实例

*

* @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反射法
通过Constructor
类反射出对应的类对象,接着再获取指定参数的构造函数,最后根据传入的值实例化对象即可得到想要的对象。具体代码如下:

/**

* 根据传入的类名和值,动态构造该类的实例

*

* @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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式