Создать собственный метод java для конструктора
Я пишу программу на Java, и я хотел бы создать собственный интерфейс для библиотеки, написанной на С++. Но я смущен тем, как написать объявление собственного метода для конструктора.
Скажем, у меня есть этот класс и конструктор С++:
template <class _Tp,class _Val>
class Arbitrator
{
public:
Arbitrator();
}
Как написать декларацию собственного метода?
Это то, что я делаю до сих пор:
пакет hbot.proxy.bwsal.arbitrator;
public class Arbitrator<Tp, Val>
{
public native Arbitrator Arbitrator();
}
Я бы это сделал?
Спасибо
Ответы
Ответ 1
Создайте собственный метод. Например, private native void init()
. Вызовите его из конструктора в Java. В этом JNI-реализации доступ к С++-классу по мере необходимости.
В любом случае вам придется использовать JNI-сгенерированные сигнатуры методов, поэтому вы не можете напрямую сопоставить Java-класс с классом С++, если это то, что вы хотели сделать.
Ответ 2
Чтобы вызвать конструктор класса Java из кода JNI С++, вам нужно использовать конструкторы JNI. Предполагая, что вы передали ссылку на JVM с JNIEnv в своей функции С++, например:
//Объявление функции
void
Java_com_hunter_mcmillen_Arbitrator (JNIEnv *env, jobject thiz) {
//Ссылка на класс Java, который имеет ваш метод
jclass itemClazz = env->FindClass("com/hunter/mcmillen/myjava/myclasses/Arbitrator");
//Ссылка на метод в вашем классе java
jmethodID constructor = env->GetMethodID(itemClazz, "<init>", "(Ljava/lang/Object;Ljava/lang/Object)V");
}
И теперь вы можете называть функцию конструктора в своем коде на С++.