QJniArray Class

template <typename T> class QJniArray

Die Klasse QJniArray ist eine Vorlagenklasse, die ein Array in Java darstellt. Mehr...

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

Öffentliche Typen

Öffentliche Funktionen

QJniArray()
QJniArray(Container &&container)
QJniArray(QJniArray<Other> &&other)
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>::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>::const_iterator end() const
QJniArray<T>::const_reverse_iterator rbegin() const
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)
QJniArray<T>::const_reference operator[](QJniArrayBase::size_type i) const

Detaillierte Beschreibung

Die QJniArray-Vorlage erleichtert die Arbeit mit Arrays, wenn sie mit Java-Methoden verbunden ist, die ein Java-Array zurückgeben oder aufnehmen.

Hinweis: Java-Arrays können primitive Typen und Objekte enthalten. Das Array selbst kann wie ein Java-Objekt behandelt werden, und das JNI-Framework bietet explizite APIs für die Arbeit mit solchen Arrays. Darüber hinaus bietet die Java-Klassenbibliothek Container-Typen wie List oder ArrayList. Objekte dieser Typen können nicht durch ein QJniArray dargestellt werden. Verwenden Sie stattdessen QJniObject, um die klassenspezifischen Mitgliedsfunktionen aufzurufen.

Um eine QJniArray-Instanz zu erzeugen, konstruieren Sie sie entweder aus einem entsprechenden C++-Container:

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

oder aus einer Initialisierungsliste:

QJniArray intArray{1, 2, 3};

QJniArray erstellt ein neues Java-Array und kopiert die C++-seitigen Daten in dieses Array.

Beim Aufruf von Funktionen, die ein Array über QJniObject::callMethod zurückgeben, wie z. B. char[] toCharArray() in der Java-Klasse String, geben Sie den Rückgabetyp als C-Array an (im Folgendenjchar[] ):

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

Die Variable charArray wird vom Typ QJniArray<jchar> sein und einen neuen globalen Verweis auf das JNI-Objekt jcharArray enthalten.

Schließlich kann ein QJniArray aus einem bestehenden jarray oder QJniObject konstruiert werden. Beachten Sie jedoch, dass keine Typüberprüfung durchgeführt wird, um zu überprüfen, ob jarray oder QJniObject tatsächlich ein Array mit Elementen des angegebenen Typs darstellt, und der Zugriff auf ein nicht passendes QJniArray führt zu undefiniertem Verhalten.

Auf die Daten in einem QJniArray kann entweder Element für Element mit at() oder operator[]() zugegriffen werden, es kann darüber iteriert werden, oder sie können mit der Funktion toContainer() in einen geeigneten C++-Container kopiert werden.

QList<jchar> characters = charArray.toContainer();

Der Rückgabetyp von toContainer() hängt von dem Typ ab, mit dem QJniArray instanziiert wurde. Für QJniArray<T> ist dies in der Regel QList<T>, mit den folgenden Ausnahmen:

SpezialisierungC++-Typ
QJniArray<jbyte>QByteArray
QJniArray<char>QByteArray
QJniArray<jstring>QStringList
QJniArray<QString>QStringList

Die Elemente im QJniArray können nicht durch QJniArray-APIs verändert werden, und es gibt keinen mutierenden Iterator.

Hinweis: Java-Arrays sind auf 32 Bit begrenzt, und der size_type Member-Typ von QJniArray ist jsize, ein 32-Bit-Integer-Typ. Der Versuch, ein QJniArray aus einem C++-Container zu konstruieren, der mehr als 2^32 Elemente enthält, führt zu einer Laufzeitbehauptung.

Dokumentation der Mitgliedstypen

[alias] QJniArray::const_iterator

Ein konstanter Iterator mit wahlfreiem Zugriff für QJniArray.

[alias] QJniArray::const_reverse_iterator

Ein umgekehrter Iterator für die QJniArray, Synonym für std::reverse_iterator<const_iterator>.

Dokumentation der Mitgliedsfunktionen

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

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

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

Gibt einen Iterator im STL-Stil zurück, der auf das erste Element im Array zeigt.

Wenn das Array invalid ist, gibt dies denselben Iterator zurück wie die entsprechende Funktion end().

Siehe auch end() und rbegin().

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

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

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

Gibt einen Iterator im STL-Stil zurück, der direkt auf das letzte Element der Liste zeigt.

Siehe auch begin() und rend().

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

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

Gibt einen Reverse-Iterator im STL-Stil zurück, der auf das erste Element im Array in umgekehrter Reihenfolge zeigt.

Wenn das Array invalid ist, gibt dies denselben Iterator zurück wie die entsprechende Funktion rend().

Siehe auch rend() und begin().

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

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

Gibt einen umgekehrten Iterator im STL-Stil zurück, der in umgekehrter Reihenfolge direkt auf das letzte Element der Liste zeigt.

Siehe auch rbegin() und end().

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

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

Gibt den Wert an der Position i in dem umschlossenen Java-Array zurück.

i muss eine gültige Indexposition in der Liste sein (d.h. 0 <= i < size()).

Siehe auch size().

QJniArray::QJniArray()

Standard-Konstruktor von QJniArray. Dies erzeugt kein Java-seitiges Array, und die Instanz ist ungültig.

Siehe auch isValid.

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

Konstruiert ein QJniArray, das ein neu erstelltes Java-Array für Elemente des Typs Container::value_type umhüllt, und füllt das Java-Array mit den Daten von container.

Diese Funktion nimmt nur dann an der Überladungsauflösung teil, wenn Container ein Container ist, der Elemente eines JNI type oder äquivalenten C++-Typs speichert und einen Vorwärts-Iterator bereitstellt.

Die Spezialisierung des konstruierten QJniArray hängt vom Wertetyp des container ab. Für ein Container<T> (wie z.B. QList<T>) wird es typischerweise QJniArray<T> sein, mit den folgenden Ausnahmen:

ContainerSpezialisierung
QByteArrayQJniArray<jbyte>
QStringListQJniArray<jstring>
Container::Wert_TypSpezialisierung
QJniObjectQJniArray<jobject>

Siehe auch QJniArrayBase::fromContainer() und toContainer().

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

Konstruiert ein QJniArray durch Verschieben von other. Das Array other wird zu invalid.

Dieser Konstruktor nimmt nur dann an der Überlastauflösung teil, wenn der Elementtyp Other von other in den Elementtyp T des zu konstruierenden QJniArrays konvertierbar ist. Es findet jedoch keine tatsächliche Konvertierung statt.

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

Konstruiert ein QJniArray, indem er von object ausgeht. QJniObject wird zu invalid.

Hinweis: Dieser Konstruktor führt keine Überprüfung durch, ob das Java-seitige Objekt ein Array des richtigen Typs ist. Der Zugriff auf ein nicht passendes QJniArray führt zu undefiniertem Verhalten.

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

Konstruiert ein QJniArray durch Kopieren von other. Beide QJniArray-Objekte verweisen auf das gleiche Java-Array-Objekt.

Dieser Konstruktor nimmt nur dann an der Überlastauflösung teil, wenn der Elementtyp Other von other in den Elementtyp T des zu konstruierenden QJniArray konvertierbar ist. Es findet jedoch keine tatsächliche Konvertierung statt.

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

Konstruiert ein QJniArray, das dasselbe Java-Array wie object umhüllt und eine neue globale Referenz erzeugt. Um ein QJniArray aus einer bestehenden lokalen Referenz zu konstruieren, verwenden Sie ein QJniObject, das über fromLocalRef() konstruiert wird.

Hinweis: Dieser Konstruktor führt keine Überprüfung durch, ob das Java-seitige Objekt ein Array des richtigen Typs ist. Der Zugriff auf ein nicht passendes QJniArray führt zu undefiniertem Verhalten.

[explicit] QJniArray::QJniArray(jarray array)

Konstruiert ein QJniArray, das das Java-seitige Array array umhüllt und eine neue globale Referenz auf array erzeugt.

Hinweis: Dieser Konstruktor führt keine Überprüfung durch, ob das Java-seitige Objekt ein Array des richtigen Typs ist. Der Zugriff auf ein nicht übereinstimmendes QJniArray führt zu undefiniertem Verhalten.

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

Konstruiert ein QJniArray, das ein neu erstelltes Java-Array für Elemente vom Typ T umhüllt, und füllt das Java-Array mit den Daten von list.

Siehe auch QJniArrayBase::fromContainer() und toContainer().

QJniArray::~QJniArray()

Zerstört das Objekt QJniArray und gibt alle Verweise auf das gewickelte Java-Array frei.

auto QJniArray::arrayObject() const

Gibt das gewrappte Java-Objekt als passenden jarray Typ zurück, der dem Elementtyp T dieses QJniArray Objekts entspricht.

Tjarray-Typ
jbytejbyteArray
jcharjcharArray
......
jobjectjobjectArray
QJniObjectjobjectArray
Q_DECLARE_JNI_CLASSjobjectArray

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

Gibt einen Container zurück, der mit den Daten im umschlossenen Java-Array gefüllt ist.

Wenn kein container angegeben wird, hängt der Typ des zurückgegebenen Containers vom Elementtyp dieses QJniArray ab. Für QJniArray<T> ist dies in der Regel QList<T>, mit den folgenden Ausnahmen:

Wenn Sie einen benannten Container (einen l-Wert) für container übergeben, wird dieser Container gefüllt und ein Verweis auf ihn zurückgegeben. Wenn Sie einen temporären Container (einen r-Wert, einschließlich des Standardarguments) übergeben, wird dieser Container gefüllt und als Wert zurückgegeben.

Diese Funktion kehrt sofort zurück, wenn das Array invalid ist.

Siehe auch QJniArrayBase::fromContainer().

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

Verschiebt other in dieses QJniArray und gibt einen Verweis auf dieses zurück. Das Array other wird zu invalid.

Dieser Operator nimmt nur dann an der Überlastauflösung teil, wenn der Elementtyp Other von other in den Elementtyp T von diesem QJniArray konvertierbar ist. Es findet jedoch keine tatsächliche Konvertierung statt.

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

Weist other diesem QJniArray zu und gibt einen Verweis auf dieses zurück. Beide QJniArray Objekte verweisen auf das gleiche Java-Array-Objekt.

Dieser Operator nimmt nur dann an der Überladungsauflösung teil, wenn der Elementtyp Other von other in den Elementtyp T von diesem QJniArray konvertierbar ist. Es findet jedoch keine tatsächliche Konvertierung statt.

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