【问题标题】:cast from jobject to jboolean loses precision从 jobject 转换为 jboolean 失去精度
【发布时间】:2015-12-07 16:47:10
【问题描述】:

我正在尝试将 jobject 转换为 jboolean

    jmethodID mGet = env->GetMethodID(cJsonObjClass, "get","(Ljava/lang/String;)Ljava/lang/Object;");    
    jboolean val = (jboolean)env->CallObjectMethod(object, mGet , key);

得到这个编译错误:

从“jobject {aka _jobject*}”转换为“jboolean {aka unsigned char}”会丢失精度 [-fpermissive]

这是什么意思,怎么办?

【问题讨论】:

  • “我正在尝试将 jobject 转换为 jboolean”。别。 jboolean 对应于 Java 类型 boolean,它是一个原始类型,而不是一个对象。您必须显示更多代码,以便有人能够说出正确的方法是什么(例如,object 的类型是什么?Get 方法的签名是什么?...)
  • 对象是json对象我通过用getBoolean替换get方法来解决

标签: c++ java-native-interface


【解决方案1】:

对于在使用 CallObjectMethod 时遇到错误的其他人

error: cast from pointer to smaller type 'jboolean' (aka 'unsigned char') loses information

调用返回布尔值的方法的正确方法是使用CallObjectMethod

所以这里的答案是:

改变

 jboolean val = (jboolean)env->CallObjectMethod(object, mGet , key);

jboolean val = (jboolean)env->CallBooleanMethod(object, mGet , key);

【讨论】:

    猜你喜欢
    • 2022-12-31
    • 2019-10-23
    • 2018-11-18
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多