使用 Javassist 加载外部 .class 文件
Loading external .class files with Javassist
我有一个名为 'TestDir' 的目录,其中包含几个外部 .class 文件,我想在运行时使用 JAssist 加载和修改这些文件。
我知道这就是你应该如何使用 javassist 加载外部 classes:
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 的事情,据我所知,包名称是 class 文件的一部分。这意味着,您的代码需要更改为:
ClassPool pool = ClassPool.getDefault();
pool.insertClassPath("C:\Users\MainPC\Documents");
CtClass clazz = pool.getCtClass("TestDir/TestClass");
我有一个名为 'TestDir' 的目录,其中包含几个外部 .class 文件,我想在运行时使用 JAssist 加载和修改这些文件。
我知道这就是你应该如何使用 javassist 加载外部 classes:
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 的事情,据我所知,包名称是 class 文件的一部分。这意味着,您的代码需要更改为:
ClassPool pool = ClassPool.getDefault();
pool.insertClassPath("C:\Users\MainPC\Documents");
CtClass clazz = pool.getCtClass("TestDir/TestClass");