如何使用Javassist获取原始类型的类?
发布时间:2020-12-14 06:04:31 所属栏目:Java 来源:网络整理
导读:在我的程序中,我处理类和原始类型. 如果程序找到一个类,它只执行以下调用之一: Class.forName(classname) cc.toClass()其中cc是CtClass的一个实例 但是,如果它找到原始类型,事情会变得更糟: Class.forName不可用,不能与原始类型一起使用. cc.toClass()返回
在我的程序中,我处理类和原始类型.
如果程序找到一个类,它只执行以下调用之一: > Class.forName(classname) 但是,如果它找到原始类型,事情会变得更糟: > Class.forName不可用,不能与原始类型一起使用. 可以从原始类型包装类调用TYPE字段,但是如何使用反射呢? 这是我的代码: CtClass cc;//Obtained from caller code Class<?> classParam; if (cc.isprimitive()) { classParam= ?? // How can I get TYPE field value with reflection ? } else { String nomClasseParam = cc.getName(); if (nomClasseParam.startsWith("java")) { classeParam = Class.forName(nomClasseParam); } else { classeParam = cc.toClass(); } } Javassist 3.12.0.GA 编辑: 解决方法
在我看来,你可以将cc转换为它的子类
CtPrimitiveType.
如果你想要一个包装器,那么你可以使用方法getWrapperName来获取相应包装器的类名.您可以像往常一样使用Class.forName将该名称转换为Class对象.但是,我不认为你想要一个包装器,所以这没有用. 相反,我认为你想要getDescriptor,然后是一个费力的手动编码的switch语句: switch(descriptor) { case 'I': classParam = int.class; break; // etc } 这样的东西真的应该在Javassist中.但据我所知,事实并非如此. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 无法使用Java 8修改package-info.java的注释
- java – 在某些情况下处理RuntimeExceptions有效吗?
- java – Mockito风格anyXXX单元测试方法
- 从Java中的Map中获取值的范围
- java – 无法使用Spring HATEOAS和Jersey获得HAL渲染
- dart – 对象的默认stringify,相当于Java的toString?
- java – ListView Viewholder复选框状态
- java – 如何在数组中存储多个数据类型?
- java – 停止代码格式从eclipse中删除空格
- 为什么Java forkbomb不会导致StackOverflowError?