根据这个link,为了使用JNI从本机(C ++)代码调用Java方法,GetMethodID函数用于:
“返回类的实例(非静态)方法的方法ID 接口“。
作为示例,考虑以下 File 类的构造函数:
public File(Uri uri)
此构造函数的JNI方法签名为:
“Ljava / IO /文件;(Landroid.net.Uri;)V”
但是,由于Uri是一个抽象类,是否可以使用包含从Uri派生的类型的签名来检索此构造函数的方法ID?
*我问这个,因为我正在使用一个环境,根据运行时对象类型自动创建实际签名,但这似乎失败了,但我不确定它是否是JNI或JNI的限制签名创建代码中的错误,或完全不同的东西。
答案 0 :(得分:2)
方法的签名由其自己的源代码确定,而不是由您想要调用它的内容来确定。如果您拥有的只是实际的参数列表而不是正式的参数类型,那么您没有足够的信息来在运行时生成它。
但是我无法理解你为什么想要或需要在运行时首先生成它,或者为什么你想要或者需要这样做通过JNI。也许你应该看java.beans.Statement
和朋友。
我正在使用一个环境,根据运行时对象类型
自动创建实际签名
不,你不是,因为这是不可能的。你误解了,或者你正在尝试不可能的事。