diff --git a/src/corelib/kernel/qjniarray.h b/src/corelib/kernel/qjniarray.h index 16c02e087d8..f2f4dba92e7 100644 --- a/src/corelib/kernel/qjniarray.h +++ b/src/corelib/kernel/qjniarray.h @@ -126,7 +126,9 @@ public: using ElementType = typename std::remove_reference_t::value_type; if constexpr (std::disjunction_v, - std::is_same>) { + std::is_same, + std::is_base_of + >) { return makeObjectArray(std::forward(container)); } else if constexpr (std::is_same_v) { return makeArray(std::forward(container), &JNIEnv::NewFloatArray, @@ -370,10 +372,12 @@ auto QJniArrayBase::makeObjectArray(List &&list) // this assumes that all objects in the list have the same class jclass elementClass = nullptr; - if constexpr (std::is_same_v) + if constexpr (std::disjunction_v, + std::is_base_of>) { elementClass = list.first().objectClass(); - else + } else { elementClass = env->GetObjectClass(list.first()); + } auto localArray = env->NewObjectArray(length, elementClass, nullptr); if (QJniEnvironment::checkAndClearExceptions(env)) return QJniArray();