只知道类名字符串(不知路径)如何转换为Class 类型

七里林间 2014-07-30 07:46:28
public static void main(String[] args) {
CustomerInfo cus = new CustomerInfo();
cus.setName("aa");
JSONObject cusstr = JSONObject.fromObject(cus);

String str = "CustomerInfo";

try {
Class<?> cl = Class.forName(str);
JSONObject.toBean(cusstr, cl.getClass()); //这里报错
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}



Object net.sf.json.JSONObject.toBean(JSONObject jsonObject, Class beanClass)


错误信息提示如下:
net.sf.json.JSONException: java.lang.SecurityException: Can not make a java.lang.Class constructor accessible
at net.sf.json.JSONObject.toBean(JSONObject.java:302)
at net.sf.json.JSONObject.toBean(JSONObject.java:247)
at com.ruijie.common.util.StringUtils.jsonToEntity(StringUtils.java:85)
at com.ruijie.csc.center.customer.service.impl.CustomerInfoServiceImpl.main(CustomerInfoServiceImpl.java:145)
Caused by: java.lang.SecurityException: Can not make a java.lang.Class constructor accessible
at java.lang.reflect.AccessibleObject.setAccessible0(AccessibleObject.java:118)
at java.lang.reflect.AccessibleObject.setAccessible(AccessibleObject.java:108)
at net.sf.json.util.NewBeanInstanceStrategy$DefaultNewBeanInstanceStrategy.newInstance(NewBeanInstanceStrategy.java:56)
at net.sf.json.JSONObject.toBean(JSONObject.java:296)
... 3 more
...全文
733 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
suciver 2014-07-31
  • 打赏
  • 举报
回复
楼主CustomerInfo这个类代码中不是已经有了,干嘛还要用Class.forName(); 直接用JSONObject.toBean(cusstr, CustomerInfo.class);
末日哥 2014-07-31
  • 打赏
  • 举报
回复
需要定义无参构造方法?
markcxz 2014-07-31
  • 打赏
  • 举报
回复
Class.forName利用ClassLoader 机制加载类,根据Java规范,任何作为 String 类型参数传递给 ClassLoader 中方法的类名称都必须是一个二进制名称,二进制名称由包名+类名构成,例如: "java.lang.String" "javax.swing.JSpinner$DefaultEditor" "java.security.KeyStore$Builder$FileBuilder$1" "java.net.URLClassLoader$3$1" ---------------------- http://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.html
七里林间 2014-07-31
  • 打赏
  • 举报
回复
引用 1 楼 markcxz的回复:
Class.forName利用ClassLoader 机制加载类,根据Java规范,任何作为 String 类型参数传递给 ClassLoader 中方法的类名称都必须是一个二进制名称,二进制名称由包名+类名构成,例如: "java.lang.String" "javax.swing.JSpinner$DefaultEditor" "java.security.KeyStore$Builder$FileBuilder$1" "java.net.URLClassLoader$3$1"
嗯嗯 谢谢哈 看来这种方案是不可行的了...
七里林间 2014-07-31
  • 打赏
  • 举报
回复
引用 3 楼 suciver的回复:
楼主CustomerInfo这个类代码中不是已经有了,干嘛还要用Class.forName(); 直接用JSONObject.toBean(cusstr, CustomerInfo.class);
这是测试代码.... 我是想测试只知道类名 是否可以转换为Class
七里林间 2014-07-31
  • 打赏
  • 举报
回复
引用 2 楼 fudongrifdr 的回复:
需要定义无参构造方法?
从new CustomerInfo() 说明是有无参构造方法的

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧