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 上调用的。
getClassLoader
是 java.lang.Class
的实例方法,因此您需要使用 CallObjectMethod
并向其传递一个 Class
实例。您在 mainClass
中拥有的是 Class
的一个实例(特别是 Class<MainActivity>
的一个实例)。
我看到这段代码
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 上调用的。
getClassLoader
是 java.lang.Class
的实例方法,因此您需要使用 CallObjectMethod
并向其传递一个 Class
实例。您在 mainClass
中拥有的是 Class
的一个实例(特别是 Class<MainActivity>
的一个实例)。