使用Javassist加载外部.class文件

使用Javassist加载外部.class文件,javassist,Javassist,我有一个名为“TestDir”的目录,其中包含几个外部.class文件,我希望在运行时使用JAssist加载和修改这些文件 我理解这就是使用javassist加载外部类的方式: ClassPool pool = ClassPool.getDefault(); pool.insertClassPath("C:\\Users\\MainPC\\Documents\\TestDir"); CtClass clazz = pool.getCtClas

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

我理解这就是使用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)

有人能给我解释一下为什么会发生这种情况吗?

我做了类似于javassist的事情,据我所知,包名是类文件的一部分。这意味着您的代码需要更改为:

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