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

JNI:返回用户定义的java类时使用什么签名?,java,c++,java-native-interface,signature,Java,C++,Java Native Interface,Signature,基于此,完全限定的类签名是l完全定义的类。 例如String-->Ljava/lang/String 用户定义类呢?它们是否也被视为完全定义的类? 例如,我创建了一个类容器。我可以使用“LContainer”作为签名吗?我知道当我使用简单字符串时,我的其他代码可以工作,但当我用自己的用户定义类替换它时,由于某种原因,我可能会丢失它,它不再工作 getClass是一个静态方法,返回容器类型值。我的签名正确吗()l集装箱 jmethodID mid = env->GetStaticMethod

基于此,完全限定的类签名是
l完全定义的类
。 例如
String
-->
Ljava/lang/String

用户定义类呢?它们是否也被视为完全定义的类? 例如,我创建了一个类
容器
。我可以使用
“LContainer”
作为签名吗?我知道当我使用简单字符串时,我的其他代码可以工作,但当我用自己的用户定义类替换它时,由于某种原因,我可能会丢失它,它不再工作

getClass
是一个静态方法,返回
容器
类型值。我的签名正确吗<代码>()l集装箱

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

请让我知道你的想法。提前感谢

假设
容器
在包
com.contosso
中,您需要
“()Lcom/contosso/Container;”

我不知道您将如何处理
容器
在默认包中的情况。显而易见的解决方法是将其移动到包中:-)


感谢您指出规范中缺少的分号

假设
容器
在包
com.contosso
中,您需要
“()Lcom/contosso/Container;”

我不知道您将如何处理
容器
在默认包中的情况。显而易见的解决方法是将其移动到包中:-)

感谢您指出规范中缺少的分号,并提供有助于JNI签名的
javap
工具

例如,要在
biginger
类中查找
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文件的类路径

虽然这不能直接获得类的签名,但肯定有一些方法或字段引用了该类,因此可以在某处找到类描述符。

并提供有助于JNI签名的
javap
工具

例如,要在
biginger
类中查找
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文件的类路径


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

如果容器不在任何包中怎么办?我认为LContainer可以工作,因为当我测试返回一个整数时,我使用的格式是()。不幸的是,LContainer无法工作。您缺少
javap-s
的输出。它从来没有错过。您停止猜测,使用
javap-s
的输出。这从来没有错。谢谢,这帮了大忙。谢谢,这帮了大忙。