2011-11-09 22 views
6

我要写我自己的Python-Java界面。它被编译为DLL并使用ctypes包装。我的Python-Java界面,好的设计?以及如何包装JNI函数?

但是,可以找到Java类并分配Java对象。 但是,如果不使用这些对象 方法,将会是另一种语言的接口?我的目标是尽可能地使这一点变得自然。不幸的是, 不仅仅可能通过名称找到Java方法只有

我的模型如下:

JCLASS

  • 这个类的一个实例表示Java类。

JObject

  • 这个类的实例表示一个Java的对象。它必须是 用JClass实例初始化。 (然而,当然,后来有 应该是构造函数的参数也。)

JMethod

  • 代表一个Java对象的方法。它包含所需方法的名称和签名。签名由初始化时给出的类动态地评估。

    实施例:

    mainMethod = JMethod('main', JStringArray) 
    

    注意JStringArray是表示一个字符串数组JCLASS的一个实例。

    JMethod可以添加到JClass实例中。但是只能从实例化的JObject中调用。

JStaticMethod

  • 就像JMethod,但它也可以从一个JCLASS 实例调用。

内置类型

  • 我做JIntJShortJLontJChar,等等。是 内置的包装类型。

    像:

    JInt = JClass('java/lang/Integer') 
    JShort = JClass('java/lang/Short') 
    JString = JClass('java/lang/String') 
    

问题(S)

  1. 你怎么看待这样的设计呢?
  2. JNI函数用于调用Java类/对象的方法所有 都接受可变数量的参数。在阅读 几个主题后,从一个函数中调用一个可变参数的函数, 并且在这里也提出了一个问题,我知道这是不可能的。
    现在,是否有函数不采取可变数量的参数 但va_list什么?我只需要找到一些方法从Java中调用Python的方法!
+0

刚刚从2年前看过我的回答,并意识到这是令人难以置信的粗鲁......我真的很抱歉。谢谢你不像我那样混蛋。 –

回答

11

1.我对这种设计有什么看法?

  • 目前尚不清楚您尝试解决的实际问题。

  • 边缘情况如何;错误处理;正向/后向兼容性; Python/Java中的错误?没有乐趣,但对于强大的软件来说非常重要

  • 混合两种语言已经够难了,混合三种肯定会差很多。我期望重大的可维护性和耦合问题。

  • 已经有解决这些问题的方法。 RPC,用于使用不同语言的程序相互交谈。 Jython,用于Java/Python互操作性。我相信,Jython甚至允许您直接在Java中创建Python对象,反之亦然。澄清这些现有系统的任何缺点,以及如何解决这些缺点,将会有所帮助。

这里有一些缺失的东西:

  • 隐私
  • 接口/抽象类
  • 方法解析:过载和覆盖(特别是当一种以上的方法将匹配)
  • 例外
  • type-ch ecking或从类型错误中恢复

2.我只需要找到某种方式从Java中调用Python的方法! Jython,RPC或只是调用可执行文件?

+0

我喜欢你的帖子。你的主观意见对我来说很有意思。我会牢记这些论点。虽然它不是第二个问题的答案,但它*很好地回答了第一个问题。 +1,我想给它+10。 –

+2

除了Jython之外,还有[JPype](http://jpype.sourceforge.net/),它允许您从CPython使用Java。 – Steven

+0

@Steven - 看起来有趣,感谢您的链接! –