我想调用我的C ++类的Java绑定:
std::streamsize DataStreamJava::length() const {
jmethodID m = jni()->GetMethodID(j_dataStream_class_,
"length", "()J");
return jni()->CallLongMethod(j_dataStream_global_, m);
}
但由于这些JNI调用不是const,所以不可能。
JNI是否为const方法提供const函数?删除const属性是解决此问题的唯一方法吗?
答案 0 :(得分:3)
我认为简短的回答是“不”。这些JNI函数没有const
版本。接下来的问题可能是“应该有吗?”我认为答案也是“不”。 JNI函数都可能改变JVM的状态。 (至少它们都能够在JVM中创建错误,这会改变其内部状态。)我认为实际违反了const
属性隐含的合同 - 它不仅仅是JNI头文件中的一些设计缺陷。
答案 1 :(得分:1)
除了JNI之外,你想在 const 一个中调用非const 方法。
我认为您可以使用const_cast<>
来完成,但请先阅读details。
答案 2 :(得分:1)
如果JNI没有你想要的const注释,这可能是 mutable
实际上可能是个好主意的情况。将JNI成员标记为mutable
并手动检查逻辑常量。