如何从Javaclass对应的jclass中获取其名称?

How to obtain the name of a Java class from its corresponding jclass?

我有一个jclass,我需要找出对应的Javaclass的名字。对于类似的问题,SO 上有一个广受欢迎的答案,但是,它需要一个对象,该对象是此 class 的一个实例:

我并不总是有这样的例子,其中 jclass 的名字会非常有用,而且我很难相信 Java 无法找到 class的名字,明显是静态的属性,只有静态方法。那么,它是否可行,如何实现?

jclass 是一个 jobject 子类,它引用 java Class 对象。

因此,从您找到的答案中删除前几行:

jclass input = ...; // Class<T>
jclass cls_Class = env->GetObjectClass(input); // Class<Class>

// Find the getName() method on the class object
mid = env->GetMethodID(cls_Class, "getName", "()Ljava/lang/String;");

// Call the getName() to get a jstring object back
jstring strObj = (jstring)env->CallObjectMethod(input, mid);

// Now get the c string from the java jstring object
const char* str = env->GetStringUTFChars(strObj, NULL);

// Print the class name
printf("\nCalling class is: %s\n", str);

// Release the memory pinned char array
env->ReleaseStringUTFChars(strObj, str);