Ste*_*han 6 java reflection javassist
在我的程序中,我处理类和原始类型.如果程序找到一个类,它只执行以下调用之一:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
Javassist 3.12.0.GA
它看起来像你可以转换cc为它的子类CtPrimitiveType.
如果你想要一个包装器,那么你可以使用方法getWrapperName来获取相应包装器的类名.您可以像往常一样使用Class.forName将该名称转换为Class对象.但是,我不认为你想要一个包装器,所以这没有用.
相反,我认为你想要getDescriptor,然后是一个费力的手动编码的switch语句:
switch(descriptor) {
case 'I': classParam = int.class; break;
// etc
}
Run Code Online (Sandbox Code Playgroud)
这样的东西真的应该在Javassist中.但据我所知,事实并非如此.
| 归档时间: |
|
| 查看次数: |
4962 次 |
| 最近记录: |