【发布时间】:2023-05-10 14:06:02
【问题描述】:
我在进行 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() 时,我得到:
public java.lang.Object android.util.ArrayMap.get(java.lang.Object), public void android.util.ArrayMap.put(java.lang.Object,java.lang.Object)
java.lang.Object 前面没有字母 L。但是我无法解释为什么我可以调用 get(),因为它与 put() 本质上是一样的。
有人可以帮忙吗?真的很感激!
【问题讨论】:
-
关于您的问题,“这是什么 Ljava/lang/Object?”,请参阅 this thread。
-
这个类对我来说一点意义都没有,你为什么要把它命名为
ArrayMap<K, V>?你甚至不能定义一个构造函数而不会在>上出现编译错误?据我所知,类名不能有空格? -
@yur,这是 Java 中的泛型。您可以查看 java.util.List 在 java 中的定义作为示例。 :)