Sur cette page

QJniArray Class

template <typename T> class QJniArray

La classe QJniArray est une classe modèle qui représente un tableau en Java. Plus d'informations...

En-tête : #include <QJniArray>
CMake : find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake : QT += core
Depuis : Qt 6.8
Hérite : QJniArrayBase

Types publics

Fonctions publiques

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

Description détaillée

Le modèle QJniArray facilite l'utilisation des méthodes Java qui renvoient ou prennent un tableau Java.

Remarque : lestableaux Java peuvent contenir des types primitifs et des objets. Le tableau lui-même peut être traité comme un objet Java, et le cadre JNI fournit des API explicites pour travailler avec de tels tableaux. En outre, la bibliothèque de classes Java fournit des types de conteneurs tels que List ou ArrayList. Les objets de ces types ne peuvent pas être représentés par un QJniArray. Utilisez plutôt QJniObject pour appeler les fonctions membres spécifiques à la classe.

Pour créer une instance de QJniArray, construisez-la à partir d'un conteneur C++ correspondant :

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

soit à partir d'une liste d'initialisateurs :

const QJniArray intArray{1, 2, 3};

QJniArray créera un nouveau tableau Java et y copiera les données du côté C++.

Lorsque vous appelez des fonctions qui renvoient un tableau via QJniObject::callMethod, comme char[] toCharArray() dans la classe Java String, spécifiez le type de retour comme un tableau C (jchar[] dans ce qui suit) :

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

La variable charArray sera de type QJniArray<jchar> et contiendra une nouvelle référence globale à l'objet JNI jcharArray.

Notez que les tableaux dans les extraits de code ci-dessus sont tous constants. L'accès aux éléments d'un tableau constant est considérablement plus efficace que l'accès à un tableau mutable.

Un QJniArray peut également être construit à partir d'un jarray ou d'un QJniObject existant. Notez toutefois qu'aucun contrôle de type n'est effectué pour vérifier que le jarray ou le QJniObject représente effectivement un tableau contenant des éléments du type spécifié, et que l'accès à un QJniArray non conforme entraîne un comportement indéfini.

Les données d'un QJniArray peuvent être accédées élément par élément à l'aide de at() ou operator[](), ou être itérées.

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

Pour copier l'ensemble du tableau dans un conteneur Qt côté C++, utilisez la fonction toContainer().

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

ce qui se produit implicitement dans

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

Le type de retour de toContainer() dépend du type de QJniArray instancié. Pour QJniArray<T>, il s'agit généralement de QList<T>, avec les exceptions suivantes :

SpécialisationType C++
QJniArray<jbyte>QByteArray
QJniArray<char>QByteArray
QJniArray<chaîne>QStringList
QJniArray<QString>QStringList

Un tableau de taille fixe peut également être créé sans aucune donnée, et peut ensuite être rempli élément par élément à l'aide de operator[]:

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

ou un itérateur mutable :

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

Comme en Java, la taille d'un tableau ne peut pas être modifiée, mais la variable tableau peut être assignée à un tableau différent.

Remarque : les tableaux Java sont limités à 32 bits, et le type membre size_type de QJniArray est jsize, qui est un type entier 32 bits. Essayer de construire un QJniArray à partir d'un conteneur C++ qui contient plus de 2^32 éléments provoquera une assertion d'exécution.

Documentation sur les types de membres

[alias] QJniArray::const_iterator

Un itérateur constant à accès aléatoire pour QJniArray.

[alias] QJniArray::const_reverse_iterator

Un itérateur inverse pour QJniArray, synonyme de std::reverse_iterator<const_iterator>.

Documentation des fonctions membres

QJniArray::QJniArray()

Constructeur par défaut de QJniArray. Il ne crée pas de tableau côté Java, et l'instance sera invalide.

Voir aussi isValid.

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

Construit un QJniArray qui enveloppe un tableau Java nouvellement créé pour les éléments de type Container::value_type, et remplit le tableau Java avec les données de container.

Contraintes

Participe à la résolution des surcharges uniquement si Container est un conteneur qui stocke des éléments d'un type JNI type ou d'un type C++ équivalent, et fournit un itérateur direct.

La spécialisation du QJniArray construit dépend du type de valeur de container. Pour un Container<T> (comme par exemple QList<T>), il s'agira généralement de QJniArray<T>, avec les exceptions suivantes :

ConteneurSpécialisation
QByteArrayQJniArray<jbyte>
QStringListQJniArray<chaîne>
Conteneur::value_typeSpécialisation
QJniObjectQJniArray<jobjet>

Voir également QJniArrayBase::fromContainer() et toContainer().

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

Construit un QJniArray en se déplaçant à partir de other. Le tableau other devient invalid.

Contraintes

Participe à la résolution de surcharge uniquement si le type d'élément Other de other est convertible en type d'élément T du QJniArray en cours de construction. Cependant, aucune conversion n'a lieu.

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

Construit un tableau QJni vide de taille size. Les éléments du tableau ne sont pas initialisés.

Cette fonction a été introduite dans Qt 6.9.

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

Construit un QJniArray en se déplaçant à partir de object. Le QJniObject devient invalid.

Remarque : ce constructeur ne vérifie pas si l'objet côté Java est un tableau du bon type. L'accès à un QJniArray non conforme entraîne un comportement indéfini.

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

Construit un QJniArray en copiant other. Les deux objets QJniArray référenceront le même objet tableau Java.

Contraintes

Participe à la résolution des surcharges uniquement si le type d'élément Other de other est convertible en type d'élément T du QJniArray en cours de construction. Cependant, aucune conversion n'a lieu.

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

Construit un QJniArray qui enveloppe le même tableau Java que object, en créant une nouvelle référence globale. Pour construire un QJniArray à partir d'une référence locale existante, utilisez un QJniObject construit via fromLocalRef().

Remarque : ce constructeur ne vérifie pas si l'objet côté Java est un tableau du bon type. L'accès à un QJniArray non conforme entraîne un comportement indéfini.

[explicit] QJniArray::QJniArray(jarray array)

Construit un QJniArray qui enveloppe le tableau côté Java array, en créant une nouvelle référence globale à array.

Remarque : ce constructeur ne vérifie pas si l'objet côté Java est un tableau du bon type. L'accès à un QJniArray non conforme entraîne un comportement indéfini.

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

Construit un QJniArray qui enveloppe un tableau Java nouvellement créé pour les éléments de type T, et remplit le tableau Java avec les données de list.

Voir également QJniArrayBase::fromContainer() et toContainer().

QJniArray::~QJniArray()

Détruit l'objet QJniArray et libère toutes les références au tableau Java enveloppé.

auto QJniArray::arrayObject() const

Renvoie l'objet Java enveloppé sous la forme du type jarray correspondant au type d'élément T de cet objet QJniArray.

Ttype de tableau
jbytejbyteArray
jcharjcharArray
......
jobjectjobjectArray
QJniObjecttableau d'objets
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

Renvoie un itérateur constant de style STL pointant sur le premier élément du tableau.

Si le tableau est invalid, cette fonction renverra le même itérateur que la fonction end() correspondante.

Voir aussi end() et 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

Renvoie un itérateur de style STL pointant juste après le dernier élément de la liste.

Voir aussi begin() et 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

Renvoie un itérateur inversé de style STL pointant sur le premier élément du tableau, dans l'ordre inverse.

Si le tableau est invalid, cette fonction renverra le même itérateur que la fonction rend() correspondante.

Voir aussi rend() et 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

Renvoie un itérateur inversé de style STL pointant juste après le dernier élément de la liste, dans l'ordre inverse.

Voir aussi rbegin() et end().

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

Renvoie un conteneur rempli avec les données du tableau Java enveloppé.

Si aucun container n'est fourni, le type de conteneur renvoyé dépend du type d'élément de ce QJniArray. Pour QJniArray<T>, il s'agit généralement de QList<T>, avec les exceptions suivantes :

Si vous fournissez un conteneur nommé (une valeur l) pour container, ce conteneur est rempli et une référence à ce conteneur est renvoyée. Si vous passez un conteneur temporaire (une valeur r, y compris l'argument par défaut), ce conteneur est rempli et renvoyé par sa valeur.

Cette fonction revient immédiatement si le tableau est invalid.

Voir également QJniArrayBase::fromContainer().

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

Déplace other dans QJniArray, et renvoie une référence à ce dernier. Le tableau other devient invalid.

Contraintes

Participe à la résolution de surcharge uniquement si le type d'élément Other de other est convertible en type d'élément T de ce QJniArray. Cependant, aucune conversion n'a lieu.

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

Affecte other à QJniArray et renvoie une référence à cet objet. Les deux objets QJniArray référenceront le même tableau Java.

Contraintes

Participe à la résolution de surcharge uniquement si le type d'élément Other de other est convertible en type d'élément T de ce QJniArray. Cependant, aucune conversion n'a lieu.

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

Renvoie un objet de référence pour la valeur à la position i dans le tableau Java enveloppé.

i doit être une position d'index valide dans la liste (c'est-à-dire 0 <= i < size()).

L'objet de référence renvoyé contient la valeur à la position i et, dans la plupart des cas, se convertit implicitement en cette valeur. L'affectation à la référence renvoyée remplacera l'entrée dans le tableau Java. Cependant, l'appel à des fonctions membres mutantes sur l'objet ne modifiera pas l'entrée dans le tableau. Pour appeler une fonction membre sur le résultat de cet opérateur, déréférencer l'objet de référence :

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

Cependant, si la modification de la valeur dans le tableau lui-même n'est pas prévue, rendez le tableau constant ou utilisez at() à la place.

Cette fonction a été introduite dans Qt 6.9.

Voir aussi at() et size().

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

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

Renvoie la valeur à la position i dans le tableau Java enveloppé.

i doit être une position d'index valide dans la liste (c'est-à-dire 0 <= i < size()).

Voir aussi 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.