如何为Java接口创建JNI?

如何为Java接口创建JNI?,java,c++,interface,java-native-interface,Java,C++,Interface,Java Native Interface,具体来说,我有一个Java接口 public interface Foo { public void Bar(int a); } 我试图为其创建JNI JFoo.h: JFoo.c: 从另一个C++文件中,我可以做< /P> JFoo foo123; foo123 = ... //the Java object which implements the Foo interface is what actually passes in 'foo123' foo123.bar(5); //

具体来说,我有一个Java接口

public interface Foo {
    public void Bar(int a);
}
我试图为其创建JNI
JFoo.h:

JFoo.c:

<>从另一个C++文件中,我可以做< /P>
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使用<代码>虚空而不是抽象C++类,但是这不能用,因为你不能声明字段“Foo123”是抽象类型的。p>


如何为Java接口创建JNI

JNI用于实现实例(没有
静态
)或类(
静态
)方法。方法实现意味着一个具体的方法,即使该类包含其他抽象的方法。接口的方法是完全抽象的


语言文档表明,
native
是a中方法的允许修饰符,但不适用于。编译器还会告诉您不能将
native
放在哪里

嗯,它不是这样工作的:(

您不能这样做。JNI允许您通过JNI实现中提供的函数调用本机方法并操作Java对象。但它与一对一映射无关

请看这里:


此示例演示了如何从C++调用.java类的方法来声明JNI方法,Java有一个特殊的<代码>本地< /Cord>关键字。你考虑过查阅文档吗?而不是只是猜测?我知道代码<原生< /Cord>关键字和AM使用这个(只是在我的问题中没有包含完整代码),谢谢!您能帮我找到正确的文档吗?我已经做了很多搜索,但是如果JNI代表Java本机接口,那么很难具体地将范围缩小到创建Java接口的JNI(我成功地创建了一个Java类的JNI,但你是对的,我只是在猜测一个接口而不是一个类。检查。你应该开始,然后阅读

javah
的工具文档和JNI规范..oo。我喜欢早上的否决票(没有解释)的味道;).oo。
...
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;
} 
...
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