QJniArray Class

template <typename T> class QJniArray

QJniArrayクラスは、Javaで配列を表現するテンプレート・クラスです。詳細...

ヘッダー #include <QJniArray>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
以来:Qt 6.8
継承: QJniArrayBase

パブリックな型

パブリック関数

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

詳しい説明

QJniArray テンプレートは、Java 配列を返したり受け取ったりする Java メソッドと連動するときに、配列を簡単に扱えるようにします。

注意: Java 配列は、プリミティブ型やオブジェクトを保持できます。配列自体はJavaオブジェクトのように扱うことができ、JNIフレームワークはそのような配列を扱うための明示的なAPIを提供します。さらに、Javaクラス・ライブラリは、ListArrayList のようなコンテナ型を提供している。これらの型のオブジェクトはQJniArrayでは表現できません。代わりに、QJniObject を使用して、クラス固有のメンバ関数を呼び出してください。

QJniArrayインスタンスを作成するには、対応するC++コンテナから構築します:

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

またはイニシャライザー・リストから:

QJniArray intArray{1, 2, 3};

QJniArrayは新しいJava配列を作成し、C++側のデータをそこにコピーします。

JavaのString クラスのchar[] toCharArray() のように、QJniObject::callMethod を介して配列を返す関数を呼び出す場合は、戻り値の型をCの配列として指定します(以下ではjchar[] ):

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

charArray 変数はQJniArray<jchar> 型になり、jcharArray JNI オブジェクトへの新しいグローバル参照を保持します。

最後に、QJniArrayは既存のjarray またはQJniObject から構築することができます。しかし、jarray またはQJniObject が本当に指定された型の要素を保持する配列を表しているかどうかを確認するための型チェックは行われず、不一致のQJniArrayにアクセスすると未定義の動作になることに注意してください。

QJniArrayのデータは、at ()またはoperator[] ()を使用して要素ごとにアクセスするか、反復処理するか、toContainer ()関数を使用して適切なC++コンテナにコピーすることができます。

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

toContainer() の戻り値の型は、QJniArray がインスタンス化された型に依存します。QJniArray<T> の場合、次の例外を除いて、これは通常QList<T> になります:

特殊化C++ 型
QJniArray<jbyte>型。QByteArray
QJniArray<char>QByteArray
QJniArray<jstring> 。QStringList
QJniArray<QString> QJniArray<jstringQStringList

QJniArrayの要素はQJniArray APIを通して変更することはできず、変異イテレータもありません。

注意: Java の配列は 32 ビットに制限されており、QJniArray のsize_type メンバ型はjsize で、これは 32 ビットの整数型です。2^32を超える要素を保持するC++コンテナからQJniArrayを構築しようとすると、実行時アサーションが発生します。

メンバ型ドキュメント

[alias] QJniArray::const_iterator

ランダムアクセス可能な,QJniArray のイテレータ.

[alias] QJniArray::const_reverse_iterator

QJniArray の逆イテレータ。std::reverse_iterator<const_iterator> の同義語。

メンバー関数ドキュメント

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

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

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

配列の最初の項目を指すSTL 形式のイテレータを返します。

配列がinvalid の場合、対応するend() 関数と同じイテレータを返します。

end() および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

リストの最後の項目の直後を指すSTL 形式のイテレータを返します。

begin() およびrend()も参照

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

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

配列の最初の項目を指すSTL 形式の逆順イテレータを返します。

配列がinvalid の場合、対応するrend() 関数と同じイテレータを返します。

rend() およびbegin()も参照して ください。

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

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

リストの最後の項目の直後を指すSTL 形式の逆順イテレータを返します。

rbegin() およびend()も参照 ください。

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

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

ラップされたJava配列の位置i にある値を返す。

i は、リスト内の有効なインデックス位置でなければなりません (つまり、0 <= < ())。i size

size()も参照

QJniArray::QJniArray()

QJniArrayのデフォルトコンストラクタ。これはJava側の配列を作成せず、インスタンスは無効になります。

isValidも参照してください

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

Container::value_type 型の要素用に新しく作成された Java 配列をラップする QJniArray を構築し、その Java 配列にcontainer からのデータを入力します。

この関数は、Container が、JNI type または同等の C++ 型の要素を格納するコンテナであり、前方イテレータを提供する場合にのみ、オーバーロード解決に参加します。

構築された QJniArray の特殊化は、container の値型に依存します。Container<T> (例えば、QList<T> など)の場合、以下の例外を除いて、通常はQJniArray<T> になります:

コンテナ特殊化
QByteArrayQJniArray<jbyte>。
QStringListQJniArray<jstring>。
コンテナ::value_type特殊化
QJniObjectQJniArray<jobject

QJniArrayBase::fromContainer() およびtoContainer()も参照してください

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

other から移動して QJniArray を構築する。other 配列はinvalid になる。

このコンストラクタは、other の要素型Other が、構築される QJniArray の要素型T に変換可能である場合にのみ、オーバーロード解決に参加します。しかし、実際の変換は行われません。

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

object から移動して QJniArray を構築する。QJniObjectinvalid になる。

注意: このコンストラクタは、Java側オブジェクトが正しい型の配列であるかどうかの検証は行いません。不一致のQJniArrayにアクセスすると、未定義の動作になります。

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

other をコピーして QJniArray を構築する。両方の QJniArray オブジェクトは、同じ Java 配列オブジェクトを参照します。

このコンストラクタは、other の要素型Other が、構築される QJniArray の要素型T に変換可能である場合にのみ、オーバーロード解決に参加します。しかし、実際の変換は行われません。

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

object と同じ Java 配列をラップする QJniArray を構築し、新しいグローバル参照を作成する。既存のローカル参照から QJniArray を構築するには、fromLocalRef() によって構築されたQJniObject を使用します。

注意: このコンストラクタは、Java側オブジェクトが正しい型の配列であるかどうかの検証は行いません。不一致のQJniArrayにアクセスすると、未定義の動作になります。

[explicit] QJniArray::QJniArray(jarray array)

Java 側配列array をラップする QJniArray を構築し、array への新しいグローバル参照を作成します。

注釈 このコンストラクタは、Java 側オブジェクトが正しい型の配列であるかどうかの検証は行いません。不一致の QJniArray にアクセスすると、未定義の動作になります。

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

QJniArray を構築します。この QJniArray は、T 型の要素用に新しく作成された Java 配列をラップし、list からのデータで Java 配列を埋めます。

QJniArrayBase::fromContainer() およびtoContainer()も参照してください

QJniArray::~QJniArray()

QJniArray オブジェクトを破棄し、ラップされた Java 配列への参照をすべて解放します。

auto QJniArray::arrayObject() const

このQJniArray オブジェクトの要素型T と一致する、適切なjarray 型としてラップされた Java オブジェクトを返します。

Tjarray型
jbytejbyteArray
jcharjchar配列
......
ジョブジェクトjobject配列
QJniObjectjobject配列
Q_DECLARE_JNI_CLASSjobject配列

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

ラップされたJava配列のデータを入れたコンテナを返す。

container が提供されない場合、返されるコンテナの型は、このQJniArray の要素型に依存する。QJniArray<T> の場合、これは通常QList<T> となる:

container に名前付きコンテナ(l値)を渡すと、そのコンテナが満たされ、そのコンテナへの参照が返される。一時的なコンテナ(デフォルト引数を含むr値)を渡すと、そのコンテナが満たされ、値が返されます。

配列がinvalid の場合、この関数は直ちに戻る。

QJniArrayBase::fromContainer()も参照のこと

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

other をこのQJniArray に移動し、この参照を返す。配列otherinvalid になる。

この演算子は、other の要素型Other がこのQJniArray の要素型T に変換可能である場合にのみ、オーバーロードの解決に参加します。 しかし、実際の変換は行われません。

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

other をこのQJniArray に代入し、この参照を返す。両方のQJniArray オブジェクトは、同じ Java 配列オブジェクトを参照します。

この演算子は、other の要素型Other がこのQJniArray の要素型T に変換可能である場合にのみ、オーバーロードの解決に参加します。

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