我在Android中使用JavaAssist来制作动态类。尝试获取get()
时,ClassPool NotFoundException
方法抛出java.lang.String
。
它在JUnit Test中运行良好。但是,如果我在设备中运行相同,则抛出异常。
以下是我正在尝试的代码段。
ClassPool classPool = ClassPool.getDefault();
CtClass ctClass=classPool.get("java.lang.String");
第二行抛出异常。
请帮忙。
答案 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}谈论数组,但也包括这种表示法。