如何为Java接口创建JNI,以便我可以在c ++代码中从接口调用函数?
具体来说,我有一个Java接口
public interface Foo {
public void Bar(int a);
}
我试图为其创建一个JNI JFoo.h:
class JFoo {
...
public:
void Bar(int a);
...
};
JFoo.c:
...
void JFoo::Bar(int a) {
//Not sure what to put here. If I don't have then I have issues because
"declaration of 'void JFoo::Bar(int)' outside of class is not
definition"
return;
}
...
所以我可以从另一个C ++文件
JFoo foo123;
foo123 = ... //the Java object which implements the Foo interface is what actually passes in 'foo123'
foo123.bar(5); //This ideally executes the Java object's implementation of bar
我还尝试在JFoo中使用virtual void
而不是拥有一个抽象的c ++类,但这不起作用,因为你“不能将字段'foo123'声明为抽象类型”。
如何为Java界面创建JNI?
答案 0 :(得分:1)
JNI用于实现实例(没有static
)或类(static
)方法。方法实现意味着一个具体的方法,即使该类包含其他抽象方法。接口的方法完全是抽象的。
语言文档指出native
是class declaration中方法的允许修饰符,但不适用于interface declaration。编译器还会告诉您不能放置native
的位置。
答案 1 :(得分:0)
嗯,它不会那样:(
你不能这样。 JNI允许您通过JNI实现中提供的函数调用本机方法和操作Java对象。但它与一对一的映射无关。
看看这里:http://jnicookbook.owsiak.org/recipe-no-027/
此示例显示如何从C ++调用类的方法。