java - 从 const 方法调用 JNI 函数

标签 java android c++ java-native-interface

我想像这样调用我的 C++ 类的 Java 绑定(bind):

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 属性是解决这个问题的唯一方法吗?

最佳答案

我认为简短的答案是“不”。这些 JNI 函数没有 const 版本。下一个问题可能是“应该有吗?”我认为答案也是“不”。 JNI 函数都有可能改变 JVM 的状态。 (至少它们都有能力在 JVM 中创建错误,从而改变其内部状态。)我认为实际上违反了 const 属性隐含的约定 -这不仅仅是 JNI 头文件中的一些设计缺陷。

关于java - 从 const 方法调用 JNI 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32003475/

相关文章:

java - 与 java 访问修饰符混淆。为什么[default]类可以从外部访问?

android - 如何修改 android 默认键盘上的键(图像或标签)

java - 子类的类加载器

c++ - 使用 wsock32 通过 gmail 和 startTLS 发送电子邮件

java - 如何在 web.xml 中过滤除请求应用程序引擎开发控制台之外的所有内容

java - 在unix环境下的jboss中部署应用程序时出现问题

java - 需要提高Android的HttpClient性能

android - Android Doze 模式下维护窗口的频率

c++ - 具有 2 种方法的 push_back 私有(private) vector ,一种不起作用

c++ - CLion对C++概念的支持