QJniArray Class
template <typename T> class QJniArrayQJniArrayクラスは、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クラス・ライブラリは、List
やArrayList
のようなコンテナ型を提供している。これらの型のオブジェクトはQJniArrayでは表現できません。代わりに、QJniObject を使用して、クラス固有のメンバ関数を呼び出してください。
QJniArrayインスタンスを作成するには、対応するC++コンテナから構築します:
またはイニシャライザー・リストから:
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<jstring | QStringList |
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() 関数と同じイテレータを返します。
[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 形式のイテレータを返します。
[noexcept]
QJniArray<T>::const_reverse_iterator QJniArray::crbegin() const
[noexcept]
QJniArray<T>::const_reverse_iterator QJniArray::rbegin() const
配列の最初の項目を指すSTL 形式の逆順イテレータを返します。
配列がinvalid の場合、対応するrend() 関数と同じイテレータを返します。
[noexcept]
QJniArray<T>::const_reverse_iterator QJniArray::crend() const
[noexcept]
QJniArray<T>::const_reverse_iterator QJniArray::rend() const
リストの最後の項目の直後を指すSTL 形式の逆順イテレータを返します。
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>
になります:
コンテナ | 特殊化 |
---|---|
QByteArray | QJniArray<jbyte>。 |
QStringList | QJniArray<jstring>。 |
コンテナ::value_type | 特殊化 |
QJniObject | QJniArray<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 を構築する。QJniObject はinvalid になる。
注意: このコンストラクタは、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 オブジェクトを返します。
T | jarray型 |
---|---|
jbyte | jbyteArray |
jchar | jchar配列 |
... | ... |
ジョブジェクト | jobject配列 |
QJniObject | jobject配列 |
Q_DECLARE_JNI_CLASS | jobject配列 |
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>
となる:
特殊化 | C++型 |
---|---|
QJniArray<jbyte> | QByteArray |
QJniArray<char> | QByteArray |
QJniArray<jstring | QStringList |
QJniArray<QString | QStringList |
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 に移動し、この参照を返す。配列other はinvalid になる。
この演算子は、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.