QJniArray Class
template <typename T> class QJniArrayDie 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:
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:
Spezialisierung | C++-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:
Container | Spezialisierung |
---|---|
QByteArray | QJniArray<jbyte> |
QStringList | QJniArray<jstring> |
Container::Wert_Typ | Spezialisierung |
QJniObject | QJniArray<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.
T | jarray-Typ |
---|---|
jbyte | jbyteArray |
jchar | jcharArray |
... | ... |
jobject | jobjectArray |
QJniObject | jobjectArray |
Q_DECLARE_JNI_CLASS | jobjectArray |
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:
Spezialisierung | C++-Typ |
---|---|
QJniArray<jbyte> | QByteArray |
QJniArray<char> | QByteArray |
QJniArray<jstring> | QStringList |
QJniArray<QString> | QStringList |
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.