Создать собственный метод 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");

}

И теперь вы можете называть функцию конструктора в своем коде на С++.