我们假设我们有一个jclass的实例:
auto objectClass = env->GetObjectClass(obj);
EXCEPTION_RETURN(env);
在下一行,我想获取类的名称并存储,以便稍后我可以使用FindClass
。
我尝试过使用getName()
方法但返回了一个java类名,我们无法在FindClass
中使用它。以下是getName()
方法的代码:
std::string GetObjectClassName(JNIEnv* env, jobject javaObject)
{
auto javaClass = env->GetObjectClass(javaObject);
EXCEPTION_RETURN(env);
auto javaClassClass = env->FindClass("java/lang/Class");
EXCEPTION_RETURN(env);
auto javaClassNameMethod = env->GetMethodID(javaClassClass, "getName", "()Ljava/lang/String;");
EXCEPTION_RETURN(env);
auto javaClassNameJString = (jstring)env->CallObjectMethod(javaClass, javaClassNameMethod);
EXCEPTION_RETURN(env);
auto javaClassNameC = env->GetStringUTFChars(javaClassNameJString, 0);
EXCEPTION_RETURN(env);
std::string javaClassName(javaClassNameC);
env->ReleaseStringUTFChars(javaClassNameJString, javaClassNameC);
EXCEPTION_RETURN(env);
return javaClassName;
}
请注意,返回的类名不能用于FindClass()
方法。我们有一个简单的方法从jclass
对象获取类名吗?