Java 从jclass(JNI)获取用于FindClass的完全限定类名
假设我们有一个jclass实例:Java 从jclass(JNI)获取用于FindClass的完全限定类名,java,c++,java-native-interface,Java,C++,Java Native Interface,假设我们有一个jclass实例: auto objectClass = env->GetObjectClass(obj); EXCEPTION_RETURN(env); 在下一行中,我想获取类的名称并存储它,以便稍后使用FindClass 我尝试过使用getName()方法,但是它返回一个java类名,我们不能在FindClass中使用它。以下是我的getName()方法代码: std::string GetObjectClassName(JNIEnv* env, jobject jav
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
对象中获取类名?“注意,返回的类名不能在FindClass()
方法中使用。”在我看来,返回字符串的唯一问题是它包含
作为分隔符,而不是//code>,这很容易修复。@Michael有时“完全限定”名称似乎有额外的特殊字符,如$和^,因此我不确定我们是否可以进行简单的“替换。替换为/”$
,不应替换,只应替换句点。例如,a.b.c.Foo$Bar
应该变成a/b/c/Foo$Bar
。请问?这个问题是关于什么的FindClass
返回一个jclass。
您已经有了jclass。
您不需要这些。