首页 > 解决方案 > 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() 基本相同。

任何人都可以帮忙吗?真的很感激!

标签: javaandroid

解决方案


Ljava/lang/Object;括号后面是预期方法的返回类型:

java.lang.NoSuchMethodError: android.util.ArrayMap.put(Ljava/lang/Object;Ljava/lang/Object;) Ljava/lang/Object;

您的调用需要一个返回某些内容的方法,但在您的ArrayMap代码中,此put方法是void.


推荐阅读