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

标签 java reflection javassist

在我的程序中,我处理类和原始类型。 如果程序找到一个类,它只需执行以下调用之一:

  • Class.forName(类名)
  • cc.toClass() 其中 ccCtClass
  • 的实例

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

  • 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();
    }
 }

Javasist 3.12.0.GA

编辑: 我已经发布了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 中。但据我所知,事实并非如此。

关于java - 如何使用 Javassist 获取原始类型的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7387802/

相关文章:

Java TextArea setText() 和 appendText() 返回空指针异常

java - 防止父节点也处理事件

swift - 静态与动态类型

java - 使用 Javassist 编辑 JFrame 类时出现 IllegalAccessError

java - 使用 Javassist 出现意外的 NullPointerException

java - @Override 必须覆盖或实现父类(super class)型

java - 返回(n > 2)? n = 5 : n = 4; doesn't work?

java - 如果类型是原始类型或类型是对象,请检查反射

c++ - .NET 程序集在运行时初始化

javassist - 使用javassist读取方法的返回值