如何从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);
我有一个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);