加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何使用Javassist获取原始类型的类?

发布时间:2020-12-14 06:04:31 所属栏目:Java 来源:网络整理
导读:在我的程序中,我处理类和原始类型. 如果程序找到一个类,它只执行以下调用之一: Class.forName(classname) cc.toClass()其中cc是CtClass的一个实例 但是,如果它找到原始类型,事情会变得更糟: Class.forName不可用,不能与原始类型一起使用. cc.toClass()返回
在我的程序中,我处理类和原始类型.
如果程序找到一个类,它只执行以下调用之一:

> Class.forName(classname)
> cc.toClass()其中cc是CtClass的一个实例

但是,如果它找到原始类型,事情会变得更糟:

> Class.forName不可用,不能与原始类型一起使用.
> cc.toClass()返回null

可以从原始类型包装类调用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

编辑:
我在下面的anwsers中发布了the solution I chose.
无论如何,我勾选了Tom’s answer.

解决方法

在我看来,你可以将cc转换为它的子类 CtPrimitiveType.

如果你想要一个包装器,那么你可以使用方法getWrapperName来获取相应包装器的类名.您可以像往常一样使用Class.forName将该名称转换为Class对象.但是,我不认为你想要一个包装器,所以这没有用.

相反,我认为你想要getDescriptor,然后是一个费力的手动编码的switch语句:

switch(descriptor) {
    case 'I': classParam = int.class; break;
    // etc
}

这样的东西真的应该在Javassist中.但据我所知,事实并非如此.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读