JNI:返回用户定义的Java类时要使用什么签名
JNI: What signature to use when returning a user defined java class?
基于此文件,完全合格的类签名为 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指出了规格中缺少的半彩
相关文章:
- 什么时候在C++中返回常量引用是个好主意
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 我可以使用什么来停止循环而不是"返回 0"?
- 这个返回元素位置的基于循环的函数有什么问题?
- 查找不存在的键时,unordered_map返回什么
- 什么更好?返回对象指针列表?或返回指向对象列表的指针?
- 将传入的网络"char*"数据转换为"uint8_t"并返回的安全方法是什么?
- 如果我在 const 函数上使用指针,我可以返回什么?
- 基本的 c++ 问题:如果我在函数中创建某些内容并返回它会发生什么?
- 什么 /可以/ 你从一个函数返回. 并期望它在到达时还活着?
- 使用枚举作为条件,if 条件将返回什么,真或假?
- 当我使用 void 函数的返回值(通过强制转换函数指针)时,究竟会发生什么?
- 返回引用实例和非引用实例(return mystr & vs mystr)之间的区别是什么?
- 我应该返回什么而不是标准::shared_ptr<>&?
- 返回类型在 C++ OOP 中是什么意思
- 什么 & 返回左值或右值?
- 实际上什么返回类型有一个新的
- 链表缓冲区;应该插入什么返回
- 指针赋值应该使用什么返回类型?