我正在使用jni4net从C#应用程序中访问Java代码,反之亦然。 jni4net使用反射来生成JNI代理代理,所以显然其中一个限制是您的Java和C#代码必须编译才能构建代理。用jni4net传递的双向对象(是:忽略缺少的类)
不幸的是,这可能会导致一个catch-22问题。试想一下:
C#类X使用Java Y类
的Java Y类使用C#类X
两者都不能编译,所以完善的解决办法是采取类(X或Y)之一,将其剥离到其裸露的签名并将其编译,然后从编译的框架生成代理。然后你可以用原文替换剥离的类,然后继续快乐的方式。
这对我来说好像很难看,我相信应该有更好的方法。一个明显的解决方案是告诉编译器(无论是C#还是Java,其中哪一个)忽略对缺少的类的引用。
是否忽略了对C#或Java编译器可行的某种缺失类的引用?有没有更好的方法来做到这一点(不,我不打算考虑套接字或任何性质的东西;我需要.NET和Java之间的真正互操作)?请求
示例代码:
实施例的代码为清楚起见移除jni4net桥接代码。 IA和IB是简单的接口,也不包括在内。
的Java:
public class A implements IA
{
public void m1()
{
System.out.println("m1 called");
}
public static void main (String args[])
{
IB b = new B();
b.m2(new A());
}
}
C#:
public class B : IB
{
public void m2(IA a)
{
a.m1();
A a2 = new A();
a2.m1();
}
}
构建体操仍然存在,您只需使用构建脚本将它们自动化即可。 – Hassan 2014-12-28 23:41:17