jni: 在 jclass 上调用对象方法

jni: call object method on jclass

我看到这段代码

    jclass mainClass = env->FindClass("com/example/MainActivity");
    jclass classClass = env->FindClass("java/lang/Class");
    jclass classLoaderClass = env->FindClass("java/lang/ClassLoader");
    jmethodID getClassLoaderMethod = env->GetMethodID(classClass, "getClassLoader", "()Ljava/lang/ClassLoader;");
    jobject classLoader = env->CallObjectMethod(mainClass, getClassLoaderMethod);
    jmethodID findClassMethod = env->GetMethodID(classLoaderClass, "findClass", "(Ljava/lang/String;)Ljava/lang/Class;");

令我惊讶的是它确实有效。 classLoader 和 findClassMethod 有效,可用于后续调用 java.

谁能解释为什么 CallObjectMethod 行在这里起作用,因为方法 getClassLoader 是一个对象方法,但它是在 jclass 上调用的。

getClassLoaderjava.lang.Class 的实例方法,因此您需要使用 CallObjectMethod 并向其传递一个 Class 实例。您在 mainClass 中拥有的是 Class 的一个实例(特别是 Class<MainActivity> 的一个实例)。