QJniArray Class
template <typename T> class QJniArrayQJniArrayクラスは、Javaで配列を表現するテンプレート・クラスです。詳細...
Header: | #include <QJniArray> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
Since: | Qt 6.8 |
Inherits: | 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 に対するランダムアクセスの const イテレータ。
[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)
QJniArray を構築します。この QJniArray は、Container::value_type
型の要素用に新しく作成された Java 配列をラップし、container からのデータを Java 配列に入力します。
この関数は、Container
がJNI type または同等の C++ 型の要素を格納するコンテナであり、前方イテレータを提供する場合にのみ、オーバーロード解決に参加します。
構築された QJniArray の特殊化は、container の値型に依存します。Container<T>
(例えば、QList<T>
など)の場合、以下の例外を除いて、通常はQJniArray<T>
になります:
コンテナ | 特殊化 |
---|---|
QByteArray | QJniArray<jbyte>。 |
QStringList | QJniArray<jstring>。 |
コンテナ::値型 | 特殊化 |
QJniObject | QJniArray<ジョブジェクト |
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
ラップされたJavaオブジェクトを、このQJniArray オブジェクトの要素型T
にマッチする適切なjarray
型として返す。
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
に変換可能である場合にのみ、オーバーロード解決に参加します。 ただし、実際の変換は行われません。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。