在我的程序中,我处理类和原始类型.
如果程序找到一个类,它只执行以下调用之一:
如果程序找到一个类,它只执行以下调用之一:
> 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中.但据我所知,事实并非如此.