Java 从jclass(JNI)获取用于FindClass的完全限定类名

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

假设我们有一个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
对象中获取类名?

“注意,返回的类名不能在
FindClass()
方法中使用。”在我看来,返回字符串的唯一问题是它包含
作为分隔符,而不是
//code>,这很容易修复。@Michael有时“完全限定”名称似乎有额外的特殊字符,如$和^,因此我不确定我们是否可以进行简单的“替换。替换为/”
$
,不应替换,只应替换句点。例如,
a.b.c.Foo$Bar
应该变成
a/b/c/Foo$Bar
。请问?这个问题是关于什么的
FindClass
返回一个
jclass。
您已经有了
jclass。
您不需要这些。