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
이후: 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++ 컨테이너에서 생성합니다:

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

또는 이니셜라이저 목록에서 생성합니다:

QJniArray intArray{1, 2, 3};

QJniArray는 새 Java 배열을 생성하고 C++ 측 데이터를 여기에 복사합니다.

QJniObject::callMethod 을 통해 배열을 반환하는 함수를 호출할 때(예: Java String 클래스의 char[] toCharArray() ) 반환 유형을 C 배열로 지정합니다(아래에서는jchar[] ):

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

charArray 변수는 QJniArray<jchar> 유형이 되고 jcharArray JNI 객체에 대한 새로운 전역 참조를 보유하게 됩니다.

마지막으로, 기존 jarray 또는 QJniObject 에서 QJniArray를 구성할 수 있습니다. 그러나 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>QStringList

QJniArray의 요소는 QJniArray API를 통해 수정할 수 없으며, 돌연변이 이터레이터가 없습니다.

참고: Java 배열은 32비트로 제한되며, QJniArray의 size_type 멤버 유형은 32비트 정수 유형인 jsize 입니다. 2^32개 이상의 요소를 포함하는 C++ 컨테이너에서 QJniArray를 생성하려고 하면 런타임 어설션이 발생합니다.

멤버 타입 문서

[alias] QJniArray::const_iterator

QJniArray 에 대한 랜덤 액세스, const 이터레이터입니다.

[alias] QJniArray::const_reverse_iterator

std::reverse_iterator<const_iterator> 의 동의어인 QJniArray 에 대한 역 이터레이터입니다.

멤버 함수 문서

[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 배열을 래핑하고 container 의 데이터로 Java 배열을 채우는 QJniArray를 구축합니다.

이 함수는 ContainerJNI type 또는 이와 동등한 C++ 유형의 요소를 저장하는 컨테이너이고 정방향 반복자를 제공하는 경우에만 과부하 해결에 참여합니다.

구성된 QJniArray의 특수화는 container 의 값 유형에 따라 달라집니다. Container<T> (예: QList<T>)의 경우 일반적으로 QJniArray<T> 이 되지만 다음과 같은 예외가 있습니다:

컨테이너전문화
QByteArrayQJniArray<jbyte>
QStringListQJniArray<jstring>
Container::value_type특수화
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 을 래핑하여 array 에 대한 새로운 전역 참조를 생성하는 QJniArray를 생성합니다.

참고: 이 생성자는 Java 측 객체가 올바른 타입의 배열인지에 대한 유효성 검사를 수행하지 않습니다. 일치하지 않는 QJniArray에 액세스하면 정의되지 않은 동작이 발생합니다.

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

T 유형의 요소에 대해 새로 생성된 Java 배열을 래핑하고 list 의 데이터로 Java 배열을 채우는 QJniArray를 구축합니다.

QJniArrayBase::fromContainer() 및 toContainer()도 참조하세요 .

QJniArray::~QJniArray()

QJniArray 객체를 삭제하고 래핑된 Java 배열에 대한 모든 참조를 해제합니다.

auto QJniArray::arrayObject() const

래핑된 Java 객체를 이 QJniArray 객체의 요소 유형 T 과 일치하는 적합한 jarray 유형으로 반환합니다.

T배열 타입
jbytejbyteArray
jcharjcharArray
......
jobjectjobjectArray
QJniObjectjobjectArray
Q_DECLARE_JNI_CLASSjobjectArray

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

래핑된 자바 배열의 데이터로 채워진 컨테이너를 반환합니다.

container 이 제공되지 않으면 반환되는 컨테이너의 유형은 이 QJniArray 의 요소 유형에 따라 달라집니다. QJniArray<T> 의 경우 일반적으로 QList<T> 이 되지만 다음과 같은 예외가 있습니다:

container 에 대해 명명된 컨테이너(lvalue)를 전달하면 해당 컨테이너가 채워지고 해당 컨테이너에 대한 참조가 반환됩니다. 임시 컨테이너(기본 인수를 포함한 rvalue)를 전달하면 해당 컨테이너가 채워지고 값으로 반환됩니다.

이 함수는 배열이 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 의 요소 유형 OtherT 의 요소 유형 QJniArray 으로 변환 가능한 경우에만 과부하 해결에 참여합니다. 그러나 실제 변환은 일어나지 않습니다.

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

QJniArrayother 을 할당하고 이에 대한 참조를 반환합니다. 두 QJniArray 객체는 모두 동일한 Java 배열 객체를 참조합니다.

이 연산자는 other 의 요소 유형 OtherT 의 요소 유형 QJniArray 으로 변환 가능한 경우에만 과부하 해결에 참여하지만 실제 변환은 일어나지 않습니다.

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