java - java.lang.NoSuchMethodError: android.util.ArrayMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
问题描述
我在进行 JUnit 测试时遇到了一个奇怪的错误。
我正在使用反射来调用我定义的方法: MyReflectUtil.callMethod(testManager, "loadPermission"); 在 testManager 中有一个 ArrayMap 的实例。loadPermission 会在该实例上调用 get() 和 put()。
这是我定义的 ArrayMap:
public class ArrayMap<K, V> {
HashMap<K, V> map = new HashMap<>();
public void put(K key, V value) {
map.put(key, value);
}
public V get(K key) {
return map.get(key);
}
}
在方法 loadPermission 中,我可以调用 get() 方法,但是当我调用 put() 时,出现错误:
java.lang.NoSuchMethodError: android.util.ArrayMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
这是什么Ljava/lang/Object?当我记录 myArrayMapInstance.getClass().getDeclaredMethods() 时,我得到:
公共 java.lang.Object android.util.ArrayMap.get(java.lang.Object), 公共 void android.util.ArrayMap.put(java.lang.Object,java.lang.Object)
它在 java.lang.Object 前面没有字母 L。但是我无法解释为什么我可以调用 get(),因为它与 put() 基本相同。
任何人都可以帮忙吗?真的很感激!
解决方案
右Ljava/lang/Object;
括号后面是预期方法的返回类型:
java.lang.NoSuchMethodError: android.util.ArrayMap.put(Ljava/lang/Object;Ljava/lang/Object;) Ljava/lang/Object;
您的调用需要一个返回某些内容的方法,但在您的ArrayMap
代码中,此put
方法是void
.
推荐阅读
- python - 将数据帧的索引设置为字典中的单个键
- android - 在 recyclerview 中为特定列表项添加处理程序
- c++ - 为什么将对象作为值传递会导致 malloc:*** 对象 0x100604c50 的错误:未分配被释放的指针
- php - 覆盖类中的生成器方法
- php - 我的 WordPress 短代码只接受属性的“默认”值,而不是我的“手动”属性值。这是代码
- c - 当在 launch.json 断点中添加的命令行参数未命中时的 Visual Studio 代码
- python - 如何在 python 的程序退出上运行协程函数?
- javascript - XMPP 聊天架构
- sql - 如果键重复,则返回最长的字符串
- python - 使用for循环python遍历数组名称