bool testTwoObjectEqual(JNIEnv *env, jobject jobj1, jobject jobj2) {
jclass cls1 = env->GetObjectClass(jobj1);
jclass cls2 = env->GetObjectClass(jobj2);
bool res = env->IsInstanceOf(jobj1, cls2) && env->IsInstanceOf(jobj2, cls1);
env->FreeLocalRef(cls1);
env->FreeLocalRef(cls2);
return res;
}
Вы можете легко сделать этот тест менее строгим, если jobj2 может быть производным из класса jobj1 .Но, возможно, все в порядке, что оба объекта получены из одного и того же базового класса, например, из java.util.ArrayList - тогда вы должны предоставить этот класс в свой метод тестирования.
Если вы хотите знать, что jobj1 и jobj2 являются ArrayList s одного типа, вы должны проверить элементы этих списков, потому что информация оОбобщение только во время компиляции:
- проверить, что jobj1 является экземпляром ArrayList
- проверить, что jobj2 является экземпляром ArrayList
- получить первый ненулевой элементjobj1, jel1
- получить первый ненулевой элемент jobj2, jel2
- проверить, что класс jel1 равен классу jel2
PS Я не очень понимаю, почему вы хотите использовать выделенный нативный метод для этой задачи;как предлагают другие (удаленные) ответы, в Java это одна строка, и их легче понять, и у них нет проблем с производительностью.Эта функция уместна только как строительный блок большей библиотеки JNI, поэтому перед возвращением вам нужно освободить все локальные ссылки.