JNI:返回用户定义的Java类时要使用什么签名

JNI: What signature to use when returning a user defined java class?

本文关键字:什么 返回 用户 定义 Java JNI      更新时间:2023-10-16

基于此文件,完全合格的类签名为 Lfully-defined-class。前任。String-> Ljava/lang/string

用户定义的类怎么样?它们也被认为是完全定义的级别吗?例如,我创建了一个Container类。我可以将"LContainer"用作签名吗?例如,当我使用简单字符串时,我知道我的其他代码有效,但是当我用自己的用户定义类替换时,由于某种原因,我可能会丢失,它不再起作用。

getClass是返回Container类型值的静态方法。我的签名正确吗?()LContainer

jmethodID mid = env->GetStaticMethodID(clazz, "getClass", "()LContainer")

请让我知道您的想法。预先感谢

Oracle Java和OpenJDK提供了有助于JNI签名的javap工具。

例如,在BigInteger类中找到probablePrime方法的签名:

javap -s java.math.BigInteger | grep -A 2 "probablePrime"
public static java.math.BigInteger probablePrime(int, java.util.Random);
   descriptor: (ILjava/util/Random;)Ljava/math/BigInteger;

- 与java一样,提供了您编译的.class文件的类路径。

虽然这并不能直接为您提供类的签名,但肯定有一些方法或字段引用该类,因此可以在某个地方找到类描述符。

假设 Container在软件包com.contosso中,您需要"()Lcom/contosso/Container;"

我不知道您将如何处理默认软件包中Container的情况。显而易见的工作组是将其移至包装中: - (

感谢用户2543253指出了规格中缺少的半彩