带有派生类型参数的JNI方法签名

时间:2017-06-04 21:29:28

标签: java android java-native-interface

根据这个link,为了使用JNI从本机(C ++)代码调用Java方法,GetMethodID函数用于:

  

“返回类的实例(非静态)方法的方法ID   接口“。

作为示例,考虑以下 File 类的构造函数:

public File(Uri uri)

此构造函数的JNI方法签名为:

  

“Ljava / IO /文件;(Landroid.net.Uri;)V”

但是,由于Uri是一个抽象类,是否可以使用包含从Uri派生的类型的签名来检索此构造函数的方法ID?

*我问这个,因为我正在使用一个环境,根据运行时对象类型自动创建实际签名,但这似乎失败了,但我不确定它是否是JNI或JNI的限制签名创建代码中的错误,或完全不同的东西。

1 个答案:

答案 0 :(得分:2)

方法的签名由其自己的源代码确定,而不是由您想要调用它的内容来确定。如果您拥有的只是实际的参数列表而不是正式的参数类型,那么您没有足够的信息来在运行时生成它。

但是我无法理解你为什么想要需要在运行时首先生成它,或者为什么你想要或者需要这样做通过JNI。也许你应该看java.beans.Statement和朋友。

  

我正在使用一个环境,根据运行时对象类型

自动创建实际签名

不,你不是,因为这是不可能的。你误解了,或者你正在尝试不可能的事。