在进行JUnit测试时,我遇到了一个奇怪的bug。
我使用反射来调用我定义的方法: 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()时,我得到了错误:
android.util.ArrayMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;:java.lang.NoSuchMethodError
这是什么Ljava/lang/Object??当我记录myArrayMapInstance.getClass().getDeclaredMethods(),时,我得到:
公共java.lang.Object android.util.ArrayMap.get( java.lang.Object),公共无效android.util.ArrayMap.put(java.lang.Object,java.lang.Object)
它在java.lang.Object前面没有字母L。然而,我无法解释为什么可以调用get(),因为它与put()从根本上是相同的。
有人能帮忙吗?真的很感激!
发布于 2020-07-02 07:30:30
结束括号后面的Ljava/lang/Object;是预期的方法的返回类型:
android.util.ArrayMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;:
java.lang.NoSuchMethodError
您的调用需要一个返回某些内容的方法,但是在您的ArrayMap代码中,这个put方法是void。
https://stackoverflow.com/questions/62691047
复制相似问题