JavaAssist ClassPool类'get方法抛出java.lang.String的NotFoundException

时间:2017-01-23 11:46:58

标签: java android classnotfoundexception javassist

我在Android中使用JavaAssist来制作动态类。尝试获取get()时,ClassPool NotFoundException方法抛出java.lang.String

它在JUnit Test中运行良好。但是,如果我在设备中运行相同,则抛出异常。

以下是我正在尝试的代码段。

ClassPool classPool = ClassPool.getDefault();
CtClass ctClass=classPool.get("java.lang.String");

第二行抛出异常。

请帮忙。

3 个答案:

答案 0 :(得分:0)

试试这段代码:

ClassPool classPool = new ClassPool();
classPool.getDefault();

答案 1 :(得分:0)

Android正在使用不同的类文件表示,其中Java字节代码被转换为Dalvik类格式。任何Java字节码操作工具都无法处理此格式,这就是Javassist无法工作的原因。

在内部,Javassist调用classLoader.getResourceAsStream("java/lang/String.class"),由于类文件在运行时不存在而在Dalvik VM上返回null

答案 2 :(得分:0)

尝试使用“Ljava.lang.String”或“Ljava.lang.String;”更改字符串“java.lang.String”它应该工作。

由于您正在加载嵌入到Java中的类,因此您的机器可能无法识别字符串的标准名称,但需要JVM内部使用的名称来标识此特定对象。

要了解有关此“L”主题的更多信息,建议您阅读JVM specs,尤其关注chapter 4.3,并且也很容易理解,只需阅读{{3}谈论数组,但也包括这种表示法。