使用Javassist加载外部.class文件

时间:2020-11-11 15:33:12

标签: javassist

我有一个名为“ TestDir”的目录,其中包含几个我希望在运行时使用JAssist加载和修改的外部.class文件。

我了解这是您应该如何使用javassist加载外部类:

    ClassPool pool = ClassPool.getDefault();
    
    pool.insertClassPath("C:\\Users\\MainPC\\Documents\\TestDir");
    CtClass clazz = pool.getCtClass("TestClass");

这可以在不引发任何异常的情况下起作用,但是现在尝试调用任何'clazz'方法,例如:

    System.out.println(clazz.getGenericSignature());

我收到以下异常:

Exception in thread "main" java.lang.RuntimeException: cannot find TestClass: TestDir.TestClass found in TestClass.class
at javassist.CtClassType.getClassFile3(CtClassType.java:211)
at javassist.CtClassType.getClassFile2(CtClassType.java:178)
at javassist.CtClassType.getGenericSignature(CtClassType.java:379)
at ReflectionTests.main(ReflectionTests.java:33)

有人可以向我解释为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

我做了类似此javassist的操作,据我所记得,包名称是类文件的一部分。这意味着您的代码需要更改为:

ClassPool pool = ClassPool.getDefault();
    
pool.insertClassPath("C:\\Users\\MainPC\\Documents");
CtClass clazz = pool.getCtClass("TestDir/TestClass");