首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用jni4net双向传递对象(was:忽略缺少的类)

使用jni4net双向传递对象(was:忽略缺少的类)
EN

Stack Overflow用户
提问于 2010-08-05 07:30:48
回答 1查看 3.2K关注 0票数 4

我正在使用jni4net从C#应用程序中访问Java代码,反之亦然。jni4net使用反射来生成JNI代码代理,因此很明显,其中一个限制是您的C#和Java代码必须编译才能构建代理。

不幸的是,这可能会导致22条军规的问题。考虑一下:

Java类X使用C#类Y

Java类Y使用C#类X

这两个类都不能编译,因此建立良好的解决方法是采用其中一个类(X或Y),将其剥离为其裸签名,并进行编译,然后从编译后的骨架生成代理。然后,您可以用原始类替换已剥离的类,然后继续您的快乐之路。

对我来说,这似乎是一种丑陋的方法,我相信应该有更好的方法。一个显而易见的解决方案是告诉编译器(无论是C#还是Java,这都无关紧要)忽略对缺失类的引用。

对于C#或Java编译器来说,忽略对某个缺失类的引用是可行的吗?有没有更好的方法来做到这一点(不,我不愿意考虑套接字或任何类似的东西;我需要.NET和Java之间真正的互操作)?

请求了示例代码:

为清晰起见,删除了jni4net桥代码的示例代码。IA和IB是简单的接口,也不包括在内。

Java:

代码语言:javascript
复制
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#:

代码语言:javascript
复制
public class B : IB  
{  
    public void m2(IA a)  
    {  
        a.m1();  
        A a2 = new A();  
        a2.m1();  
    }  
}  
EN

回答 1

Stack Overflow用户

发布于 2010-08-05 07:35:11

在Java4中,可以在访问C#对象时使用dynamic关键字。还没有完全尝试过您的方案。一些示例代码会有所帮助。

更新的问题的编辑

你有一个循环依赖,一个编译器可能会抱怨,更不用说两个了。重构到更像下面这样的东西将会有所帮助。当然,在您的实际代码中可能不会那么简单。

代码语言:javascript
复制
// java
public class A implements IA  
{  
    public void m1()  
    {  
        System.out.println("m1 called");  
    }  
}

public class MainClass
{
    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();  
    }  
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3410668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档