QJniArray Class

template <typename T> class QJniArray

QJniArrayクラスは、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クラス・ライブラリは、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 に対するランダムアクセスの 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() 関数と同じイテレータを返します。

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)

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

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

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

コンテナ特殊化
QByteArrayQJniArray<jbyte>。
QStringListQJniArray<jstring>。
コンテナ::値型特殊化
QJniObjectQJniArray<ジョブジェクト

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

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

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 に移動し、これへの参照を返します。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.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。