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

J2EE 码拜 10年前 (2015-04-18) 1726次浏览 0个评论

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

只知道类名字符串(不知路径)如何转换为Class 类型
30分
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

只知道类名字符串(不知路径)如何转换为Class 类型
5分
需要定义无参构造方法?
只知道类名字符串(不知路径)如何转换为Class 类型
5分
楼主CustomerInfo这个代码中不是已经有了,干嘛还要用Class.forName();
直接用JSONObject.toBean(cusstr, CustomerInfo.class);
只知道类名字符串(不知路径)如何转换为Class 类型
引用 2 楼 fudongrifdr 的回复:

需要定义无参构造方法?

  
从new CustomerInfo() 说明是有无参构造方法的

只知道类名字符串(不知路径)如何转换为Class 类型
引用 3 楼 suciver的回复:

楼主CustomerInfo这个代码中不是已经有了,干嘛还要用Class.forName();
直接用JSONObject.toBean(cusstr, CustomerInfo.class);

这是测试代码….
我是想测试只知道类名 是否可以转换为Class

只知道类名字符串(不知路径)如何转换为Class 类型
引用 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”

嗯嗯 谢谢哈
看来这种方案是不可行的了…


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明只知道类名字符串(不知路径)如何转换为Class 类型
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!