在本页

QtJniTypes::JObject Class

template <typename Type> class QtJniTypes::JObject

QtJniTypes 命名空间中的 JObject 模板是已声明 Java 类型的基础。更多

头文件: #include <JObject>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Qt 6.8

公共函数

JObject()
JObject(QJniObject &&other)
JObject(const QJniObject &other)
JObject(jobject other)
auto callMethod(const char *method, Args &&... args) const
QByteArray className() const
auto getField(const char *field) const
bool isValid() const
jclass objectClass() const
auto setField(const char *field, T &&value)
QString toString() const

静态公共成员

auto callStaticMethod(const char *methodName, Args &&... args)
QtJniTypes::JObject<Type> construct(Args &&... args)
QtJniTypes::JObject<Type> fromJObject(jobject object)
QtJniTypes::JObject<Type> fromLocalRef(jobject ref)
auto getStaticField(const char *field)
bool isClassAvailable()
bool registerNativeMethods(std::initializer_list<JNINativeMethod> methods)
auto setStaticField(const char *field, T &&value)

详细说明

当使用Q_DECLARE_JNI_CLASS 宏时,该模板将被特殊化。这种特殊化会在QtJniTypes 命名空间中产生一个唯一的类型。这样,当专门类型的实例作为参数传递时,类型系统就能在 JNI 调用中推导出正确的签名。

实例可以隐式地转换为QJniObject 和 jobject,并提供与QJniObject 相同的模板 API 来调用方法和访问属性。由于 JObject 的实例知道它们所持有的 Java 类型,因此访问静态方法或字段的 API 无需将类名作为显式参数。

另请参阅 Q_DECLARE_JNI_CLASS

成员函数文档

JObject::JObject()

默认构建 JObject 实例。这也会默认构建一个所代表 Java 类型的实例。

[noexcept] JObject::JObject(QJniObject &&other)

移动-从other 构建一个 JObject 实例。

JObject::JObject(const QJniObject &other)

构造一个 JObject 实例,该实例持有对与other 相同的 jobject 的引用。

JObject::JObject(jobject other)

构造一个持有other 引用的 JObject 实例。

template <typename Ret = void, typename... Args> auto JObject::callMethod(const char *method, Args &&... args) const

调用带有参数args 的实例方法method ,并返回Ret 类型的结果(除非Retvoid )。如果Ret 是 jobject 类型,则返回值将是QJniObject

另请参阅 QJniObject::callMethod() 。

[static] template <typename Ret = void, typename... Args> auto JObject::callStaticMethod(const char *methodName, Args &&... args)

使用参数args 调用静态方法methodName ,并返回Ret 类型的结果(除非Retvoid )。如果Ret 是 jobject 类型,则返回值将是QJniObject

另请参阅 QJniObject::callStaticMethod() 。

QByteArray JObject::className() const

返回此对象作为 Java 类实例的名称。

另请参阅 objectClass() 和QJniObject::className()。

[static] template <typename... Args> QtJniTypes::JObject<Type> JObject::construct(Args &&... args)

args 构造一个 Java 对象,并返回一个持有该 Java 对象引用的JObject 实例。

[static] QtJniTypes::JObject<Type> JObject::fromJObject(jobject object)

object 构造一个JObject 实例,并返回该实例。

[static] QtJniTypes::JObject<Type> JObject::fromLocalRef(jobject ref)

构造一个JObject ,其中包含ref 的本地引用,并返回该对象。

template <typename T> auto JObject::getField(const char *field) const

返回实例字段field 的值。

另请参阅 QJniObject::getField()。

[static] template <typename T> auto JObject::getStaticField(const char *field)

返回静态字段field 的值。

另请参阅 QJniObject::getStaticField()。

[static] bool JObject::isClassAvailable()

返回JObject 专用化所代表的类是否可用。

另请参阅 QJniObject::isClassAvailable()。

bool JObject::isValid() const

返回JObject 实例是否持有对 jobject 的有效引用。

另请参阅 QJniObject::isValid()。

jclass JObject::objectClass() const

以 jclass 的形式返回JObject 是其实例的 Java 类。

另请参阅 className() 和QJniObject::objectClass()。

[static] bool JObject::registerNativeMethods(std::initializer_list<JNINativeMethod> methods)

methods 中的 Java 方法注册到JObject 专用化所代表的 Java 类,并返回注册是否成功。

另请参阅 QJniEnvironment::registerNativeMethods().

template <typename Ret = void, typename T> auto JObject::setField(const char *field, T &&value)

将实例字段field 的值设置为value

另请参阅 QJniObject::setField() 。

[static] template <typename Ret = void, typename T> auto JObject::setStaticField(const char *field, T &&value)

将静态字段field 设置为value

另请参阅 QJniObject::setStaticField() 。

QString JObject::toString() const

返回包含 Java 对象字符串表示的QString

另请参阅 QJniObject::toString().

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.