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)
(since 6.9) QJniArray(QJniArrayBase::size_type size)
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>::iterator begin()
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>::iterator end()
QJniArray<T>::const_iterator end() const
QJniArray<T>::reverse_iterator rbegin()
QJniArray<T>::const_reverse_iterator rbegin() const
QJniArray<T>::reverse_iterator rend()
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)
(since 6.9) QJniArray<T>::reference operator[](QJniArrayBase::size_type i)
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;
const QJniArray intArray = QJniArray(intList);

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

const QJniArray intArray{1, 2, 3};

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

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

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

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

上記のコード・スニペットの配列はすべてconstであることに注意してください。const配列の要素へのアクセスは、変更可能な配列を操作するよりもかなり効率的です。

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

QJniArrayのデータは、at ()またはoperator[] ()を使って要素ごとにアクセスするか、反復処理することができます。

for (const auto &value : array)
    process(value);

配列全体をC++側のQtコンテナにコピーするには、toContainer ()関数を使用します。

const auto bytes = object.callMethod<jbyte[]>("getBytes");
QByteArray data = bytes.toContainer();

で暗黙的に行われます。

const auto data = object.callMethod<QByteArray>("getBytes");

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

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

固定サイズの配列は、データなしで作成することもでき、operator[] を使って要素ごとに入力することができます:

QJniArray<jint> intArray(size);
for (int i = 0; i < size; ++i)
    intArray[i] = i;

またはミュータブル・イテレータを使用して要素ごとに入力することができます:

QJniArray<QString> strings(size);
int i = 0;
for (auto string : strings) // note: not 'auto &string'
    string = u"Row %1"_s.arg(i++);

Javaのように、配列のサイズを変更することはできないが、配列変数を別の配列に代入することはできる。

注意: 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>::iterator QJniArray::begin()

[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 形式の const イテレータを返します。

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

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

[noexcept] QJniArray<T>::iterator QJniArray::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 形式のイテレータを返します。

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

[noexcept] QJniArray<T>::reverse_iterator QJniArray::rbegin()

[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>::reverse_iterator QJniArray::rend()

[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>。
コンテナ::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, since 6.9] QJniArray::QJniArray(QJniArrayBase::size_type size)

サイズsize の空の QJniArray を構築する。配列の要素は初期化されません。

この関数は Qt 6.9 で導入されました。

[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 に変換可能である場合にのみ、オーバーロード解決に参加します。 ただし、実際の変換は行われません。

[since 6.9] QJniArray<T>::reference QJniArray::operator[](QJniArrayBase::size_type i)

ラップされたJava配列の位置i にある値の参照オブジェクトを返します。

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

返された参照オブジェクトは、位置i の値を保持し、ほとんどの場合、暗黙のうちにその値に変換されます。返された参照に代入すると、Java配列のエントリが上書きされます。しかし、そのオブジェクトに対して変異メンバ関数を呼んでも、配列のエントリは変更されません。この演算子の結果に対してメンバ関数を呼び出すには、参照オブジェクトを非参照にします:

QJniArray<QString> strings = object.callMethod<QString[]>("getStrings");
if (!strings.isEmpty()) {
    if (!(*array[0]).isEmpty()) {
        // ...
    }
}

ただし、配列自体の値を変更することを意図していない場合は、配列を const にするか、代わりにat() を使用してください。

この関数は Qt 6.9 で導入されました。

at() およびsize()も参照してください

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