基于此file,完全限定类签名为Lfully-defined-class
。
恩。 String
- > Ljava/lang/string
用户定义的类怎么样?他们还被认为是完全定义的阶级吗?
例如,我创建了一个类Container
。我可以使用"LContainer"
作为签名吗?我知道我的其他代码在我使用简单的String时可行但是当我用我自己的用户定义的类替换它时,由于某些原因我可能会丢失,它不再起作用了。
getClass
是一个返回Container
类型值的静态方法。我的签名是否正确? ()LContainer
jmethodID mid = env->GetStaticMethodID(clazz, "getClass", "()LContainer")
请让我知道你的想法。提前致谢
答案 0 :(得分:1)
Oracle Java和OpenJDK提供有助于JNI签名的javap
工具。
例如,要查找probablePrime
类中BigInteger
方法的签名:
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文件提供类路径。
虽然这并没有直接为你提供类的签名,但肯定有一些引用该类的方法或字段,所以可以在某处找到类描述符。
答案 1 :(得分:0)
假设Container
位于包com.contosso
中,您需要"()Lcom/contosso/Container;"
我不知道如何处理Container
在默认包中的情况。显而易见的工作是将其移动到一个包中: - )
感谢user2543253指出了规范中缺少的分号