我正在 Android 中使用 JavaAssist 来创建动态类以达到某种目的。 ClassPool get()
方法在尝试获取 java.lang.String
时抛出 NotFoundException
。
它在 JUnit 测试中运行良好。但如果我在设备中运行相同的内容,它会抛出异常。
这是我正在尝试的代码 fragment 。
ClassPool classPool = ClassPool.getDefault();
CtClass ctClass=classPool.get("java.lang.String");
第二行抛出异常。
请帮忙。
最佳答案
尝试将字符串“java.lang.String”更改为“Ljava.lang.String”或“Ljava.lang.String;”它应该有效。
由于您正在加载嵌入到 Java 中的类,因此您的机器可能无法识别字符串的标准名称,但需要 JVM 内部使用的名称来识别此特定对象。
要了解有关“L”主题的更多信息,我建议您阅读 JVM specs特别关注 chapter 4.3而且也很容易理解,只需阅读这篇文章 question 就可以了。它讨论了数组,但也包含了这个符号。
关于Javassist ClassPool 类的 get 方法针对 java.lang.String 抛出 NotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41805663/