En esta página

QJniArray Class

template <typename T> class QJniArray

La clase QJniArray es una clase de plantilla que representa una matriz en Java. Más...

Cabecera: #include <QJniArray>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Desde: Qt 6.8
Hereda: QJniArrayBase

Tipos Públicos

Funciones Públicas

QJniArray()
QJniArray(Container &&container)
QJniArray(QJniArray<Other> &&other)
(since 6.9) QJniArray(QJniArrayBase::size_type size)
QJniArray(QJniObject &&object)
QJniArray(const QJniArray<Other> &other)
QJniArray(const QJniObject &object)
QJniArray(jarray array)
QJniArray(std::initializer_list<T> &list)
~QJniArray()
auto arrayObject() const
QJniArray<T>::const_reference at(QJniArrayBase::size_type i) const
QJniArray<T>::iterator begin()
QJniArray<T>::const_iterator begin() const
QJniArray<T>::const_iterator cbegin() const
QJniArray<T>::const_iterator cend() const
QJniArray<T>::const_iterator constBegin() const
QJniArray<T>::const_iterator constEnd() const
QJniArray<T>::const_reverse_iterator crbegin() const
QJniArray<T>::const_reverse_iterator crend() const
QJniArray<T>::iterator end()
QJniArray<T>::const_iterator end() const
QJniArray<T>::reverse_iterator rbegin()
QJniArray<T>::const_reverse_iterator rbegin() const
QJniArray<T>::reverse_iterator rend()
QJniArray<T>::const_reverse_iterator rend() const
Container toContainer(Container &&container = {}) const
QJniArray<T> &operator=(QJniArray<Other> &&other)
QJniArray<T> &operator=(const QJniArray<Other> &other)
(since 6.9) QJniArray<T>::reference operator[](QJniArrayBase::size_type i)
QJniArray<T>::const_reference operator[](QJniArrayBase::size_type i) const

Descripción Detallada

La plantilla QJniArray facilita el trabajo con métodos Java que devuelven o toman un array Java.

Nota: Losarrays Java pueden contener tipos primitivos y objetos. El array en sí mismo puede ser tratado como un objeto Java, y el framework JNI proporciona APIs explícitas para trabajar con dichos arrays. Además, la biblioteca de clases Java proporciona tipos contenedores como List o ArrayList. Los objetos de estos tipos no pueden ser representados por un QJniArray. En su lugar, utilice QJniObject para llamar a las funciones miembro específicas de la clase.

Para crear una instancia de QJniArray, constrúyala a partir de un contenedor correspondiente de C

QList<int> intList;
const QJniArray intArray = QJniArray(intList);

o a partir de una lista inicializadora:

const QJniArray intArray{1, 2, 3};

QJniArray creará un nuevo array Java y copiará en él los datos del lado C++.

Al llamar a funciones que devuelven un array a través de QJniObject::callMethod, como char[] toCharArray() en la clase Java String, especifique el tipo de retorno como un array C (jchar[] en lo que sigue):

const auto charArray = stringObject.callMethod<jchar[]>("toCharArray");

La variable charArray será del tipo QJniArray<jchar>, y contendrá una nueva referencia global al objeto JNI jcharArray.

Observe que las matrices de los fragmentos de código anteriores son todas constantes. Acceder a los elementos de un array const es considerablemente más eficiente que operar sobre un array mutable.

También se puede construir un QJniArray a partir de un jarray o QJniObject existente. Sin embargo, tenga en cuenta que no se realiza ninguna comprobación de tipo para verificar que jarray o QJniObject representa realmente un array que contiene elementos del tipo especificado, y acceder a un QJniArray que no coincide provoca un comportamiento indefinido.

Se puede acceder a los datos de un QJniArray elemento por elemento utilizando at() o operator[](), o iterando sobre ellos.

for (const auto &value : array)
    process(value);

Para copiar todo el array en un contenedor Qt del lado de C++, utilice la función toContainer().

const auto bytes = object.callMethod<jbyte[]>("getBytes");
QByteArray data = bytes.toContainer();

que se produce implícitamente en

const auto data = object.callMethod<QByteArray>("getBytes");

El tipo de retorno de toContainer() depende del tipo con el que se haya instanciado QJniArray. Para QJniArray<T> esto será típicamente QList<T>, con las siguientes excepciones:

EspecializaciónTipo C
QJniArray<jbyte>QByteArray
QJniArray<char>QByteArray
QJniArray<jstring>QStringList
QJniArray<QString>QStringList

Un array de tamaño fijo también puede crearse sin ningún dato, y luego puede poblarse elemento a elemento utilizando operator[]:

QJniArray<jint> intArray(size);
for (int i = 0; i < size; ++i)
    intArray[i] = i;

o un iterador mutable:

QJniArray<QString> strings(size);
int i = 0;
for (auto string : strings) // note: not 'auto &string'
    string = u"Row %1"_s.arg(i++);

Como en Java, el tamaño de un array no puede cambiarse, pero la variable del array puede asignarse a un array diferente.

Nota: Los arrays de Java están limitados a 32 bits, y el tipo de miembro size_type de QJniArray es jsize, que es un tipo entero de 32 bits. Si se intenta construir un QJniArray a partir de un contenedor C++ que contenga más de 2^32 elementos, se producirá una aserción en tiempo de ejecución.

Documentación de tipos de miembros

[alias] QJniArray::const_iterator

Un iterador const de acceso aleatorio para QJniArray.

[alias] QJniArray::const_reverse_iterator

Un iterador inverso para el QJniArray, sinónimo de std::reverse_iterator<const_iterator>.

Documentación de las funciones miembro

QJniArray::QJniArray()

Constructor por defecto de QJniArray. Esto no crea un array del lado de Java, y la instancia será inválida.

Véase también isValid.

[explicit] template <typename Container, QJniArrayBase::if_compatible_source_container<Container> = true> QJniArray::QJniArray(Container &&container)

Construye un QJniArray que envuelve un array Java recién creado para elementos de tipo Container::value_type, y rellena el array Java con los datos de container.

Restricciones

Participa en la resolución de sobrecargas sólo si Container es un contenedor que almacena elementos de un tipo JNI type o equivalente en C++, y proporciona un iterador hacia adelante.

La especialización del QJniArray construido depende del tipo de valor de container. Para un Container<T> (como, por ejemplo, QList<T>) será normalmente QJniArray<T>, con las siguientes excepciones:

ContenedorEspecialización
QByteArrayQJniArray<jbyte>
QStringListQJniArray<jstring>
Contenedor::tipo_valorEspecialización
QJniObjectQJniArray<jobject>

Véase también QJniArrayBase::fromContainer() y toContainer().

[noexcept] template <typename Other, QJniArrayBase::if_convertible<Other, T> = true> QJniArray::QJniArray(QJniArray<Other> &&other)

Construye un QJniArray desplazándose desde other. El array other se convierte en invalid.

Restricciones

Participa en la resolución de sobrecargas sólo si el tipo de elemento Other de other es convertible al tipo de elemento T del QJniArray que se está construyendo. Sin embargo, no se produce ninguna conversión real.

[explicit, since 6.9] QJniArray::QJniArray(QJniArrayBase::size_type size)

Construye un QJniArray vacío de tamaño size. Los elementos del array no se inicializan.

Esta función se introdujo en Qt 6.9.

[explicit noexcept] QJniArray::QJniArray(QJniObject &&object)

Construye un QJniArray pasando de object. El QJniObject se convierte en invalid.

Nota: Este constructor no realiza ninguna validación de si el objeto del lado Java es un array del tipo correcto. Acceder a un QJniArray de tipo incorrecto provoca un comportamiento indefinido.

template <typename Other, QJniArrayBase::if_convertible<Other, T> = true> QJniArray::QJniArray(const QJniArray<Other> &other)

Construye un QJniArray copiando other. Ambos objetos QJniArray harán referencia al mismo objeto array Java.

Restricciones

Participa en la resolución de sobrecargas sólo si el tipo de elemento Other de other es convertible al tipo de elemento T del QJniArray que se está construyendo. Sin embargo, no se produce ninguna conversión.

[explicit] QJniArray::QJniArray(const QJniObject &object)

Construye un QJniArray que envuelve el mismo array Java que object, creando una nueva referencia global. Para construir un QJniArray a partir de una referencia local existente, utilice un QJniObject construido mediante fromLocalRef().

Nota: Este constructor no realiza ninguna validación de si el objeto del lado Java es un array del tipo correcto. Acceder a un QJniArray de tipo incorrecto provoca un comportamiento indefinido.

[explicit] QJniArray::QJniArray(jarray array)

Construye un QJniArray que envuelve el array del lado Java array, creando una nueva referencia global a array.

Nota: Este constructor no realiza ninguna validación de si el objeto Java es un array del tipo correcto. Acceder a un QJniArray de tipo incorrecto provoca un comportamiento indefinido.

[default] QJniArray::QJniArray(std::initializer_list<T> &list)

Construye un QJniArray que envuelve un array Java recién creado para elementos de tipo T, y rellena el array Java con los datos de list.

Véase también QJniArrayBase::fromContainer() y toContainer().

QJniArray::~QJniArray()

Destruye el objeto QJniArray y libera cualquier referencia a la matriz Java envuelta.

auto QJniArray::arrayObject() const

Devuelve el objeto Java envuelto como el tipo jarray adecuado que coincide con el tipo de elemento T de este objeto QJniArray.

Ttipo jarray
jbytejbyteArray
jcharjcharArray
......
jobjectjobjectArray
QJniObjectjobjectArray
Q_DECLARE_JNI_CLASSjobjectArray

[noexcept] QJniArray<T>::const_iterator QJniArray::begin() const

[noexcept] QJniArray<T>::iterator QJniArray::begin()

[noexcept] QJniArray<T>::const_iterator QJniArray::constBegin() const

[noexcept] QJniArray<T>::const_iterator QJniArray::cbegin() const

Devuelve un iterador const de estilo STL que apunta al primer elemento de la matriz.

Si el array es invalid, devolverá el mismo iterador que la función end() correspondiente.

Véase también end() y rbegin().

[noexcept] QJniArray<T>::const_iterator QJniArray::end() const

[noexcept] QJniArray<T>::iterator QJniArray::end()

[noexcept] QJniArray<T>::const_iterator QJniArray::constEnd() const

[noexcept] QJniArray<T>::const_iterator QJniArray::cend() const

Devuelve un iterador estilo STL que apunta justo después del último elemento de la lista.

Véase también begin() y rend().

[noexcept] QJniArray<T>::const_reverse_iterator QJniArray::rbegin() const

[noexcept] QJniArray<T>::reverse_iterator QJniArray::rbegin()

[noexcept] QJniArray<T>::const_reverse_iterator QJniArray::crbegin() const

Devuelve un iterador inverso de estilo STL que apunta al primer elemento de la matriz, en orden inverso.

Si la matriz es invalid, devolverá el mismo iterador que la función rend() correspondiente.

Véase también rend() y begin().

[noexcept] QJniArray<T>::const_reverse_iterator QJniArray::rend() const

[noexcept] QJniArray<T>::reverse_iterator QJniArray::rend()

[noexcept] QJniArray<T>::const_reverse_iterator QJniArray::crend() const

Devuelve un iterador inverso estilo STL que apunta justo después del último elemento de la lista, en orden inverso.

Véase también rbegin() y end().

template <typename Container = QJniArrayBase::ToContainerType<T>, QJniArrayBase::if_compatible_target_container<T, Container> = true> Container QJniArray::toContainer(Container &&container = {}) const

Devuelve un contenedor rellenado con los datos de la matriz Java envuelta.

Si no se proporciona container, el tipo del contenedor devuelto dependerá del tipo de elemento de este QJniArray. En el caso de QJniArray<T>, suele ser QList<T>, con las siguientes excepciones:

Si pasas un contenedor con nombre (un lvalue) para container, entonces ese contenedor se llena, y se devuelve una referencia a él. Si pasa un contenedor temporal (un rvalue, incluido el argumento por defecto), entonces ese contenedor se llena, y se devuelve por valor.

Esta función devuelve inmediatamente si el array es invalid.

Véase también QJniArrayBase::fromContainer().

[noexcept] template <typename Other, QJniArrayBase::if_convertible<Other, T> = true> QJniArray<T> &QJniArray::operator=(QJniArray<Other> &&other)

Mueve other a este QJniArray, y devuelve una referencia a este. La matriz other se convierte en invalid.

Restricciones

Participa en la resolución de sobrecarga sólo si el tipo de elemento Other de other es convertible al tipo de elemento T de este QJniArray. Sin embargo, no se produce ninguna conversión real.

template <typename Other, QJniArrayBase::if_convertible<Other, T> = true> QJniArray<T> &QJniArray::operator=(const QJniArray<Other> &other)

Asigna other a este QJniArray, y devuelve una referencia a este. Ambos objetos QJniArray harán referencia al mismo objeto de matriz Java.

Restricciones

Participa en la resolución de sobrecarga sólo si el tipo de elemento Other de other es convertible al tipo de elemento T de este QJniArray. Sin embargo, no se produce ninguna conversión real.

[since 6.9] QJniArray<T>::reference QJniArray::operator[](QJniArrayBase::size_type i)

Devuelve un objeto de referencia para el valor en la posición i en la matriz Java envuelta.

i debe ser una posición de índice válida en la lista (es decir, 0 <= i < size()).

El objeto de referencia devuelto contiene el valor en la posición i, y en la mayoría de los casos se convertirá implícitamente al valor. La asignación a la referencia devuelta sobrescribirá la entrada en la matriz de Java. Sin embargo, la llamada a funciones miembro mutantes sobre el objeto no modificará la entrada en el array. Para llamar a una función miembro sobre el resultado de este operador, desreferencie el objeto de referencia:

QJniArray<QString> strings = object.callMethod<QString[]>("getStrings");
if (!strings.isEmpty()) {
    if (!(*array[0]).isEmpty()) {
        // ...
    }
}

Sin embargo, si no se pretende modificar el valor de la propia matriz, haga que la matriz sea const, o utilice at() en su lugar.

Esta función se introdujo en Qt 6.9.

Véase también at() y size().

QJniArray<T>::const_reference QJniArray::operator[](QJniArrayBase::size_type i) const

QJniArray<T>::const_reference QJniArray::at(QJniArrayBase::size_type i) const

Devuelve el valor en la posición i en la matriz Java envuelta.

i debe ser una posición de índice válida en la lista (es decir, 0 <= i < size()).

Véase también size().

© 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.