我的Python-Java界面,好的设计?以及如何包装JNI函数?

Nik*_*s R 6 c++ python java java-native-interface variadic-functions

我将编写自己的Python-Java接口.它被编译为DLL并使用ctypes进行包装.

然而,可以找到Java类并分配Java对象.但是如果不使用这些对象方法,那么另一种语言的接口是什么?我的目标是让它尽可能自然.不幸的是,它不只是可以找到Java的方法只能通过名字.

我的模型如下:

JCLASS

  • 此类的实例表示Java类.

JObject

  • 此类的实例表示Java对象.它必须使用JClass实例进行初始化.(当然,后来也应该有构造函数的参数.)

JMethod

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

    例:

    mainMethod  = JMethod('main', JStringArray)
    
    Run Code Online (Sandbox Code Playgroud)

    注意,它JStringArray是表示字符串数组的JClass实例.

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

JStaticMethod

  • 就像JMethod一样,但也可以从JClass实例调用它.

内置类型

  • 我这样做JInt,JShort,JLont,JChar,等是内置的包装类型.

    喜欢:

    JInt    = JClass('java/lang/Integer')
    JShort  = JClass('java/lang/Short')
    JString = JClass('java/lang/String')
    
    Run Code Online (Sandbox Code Playgroud)

问题:

  1. 你怎么看待这个设计?
  2. 用于调用Java类/ -object方法的JNI函数都采用可变数量的参数.在阅读了几个关于从一个函数中调用带有变量参数的函数的主题之后,并在SO上问了一个问题,我知道这是不可能的.
    现在,有些函数不采用可变数量的参数而是一个va_list或者什么?我只需要找到一些方法从Java中调用Python的方法!

Mat*_*ick 11

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

  • 目前还不清楚你要解决的实际问题是什么.

  • 边缘情况怎么样; 错误处理; 正向/后向兼容性; Python/Java中的错误?没有趣,但对于强大的软件至关重要.

  • 混合两种语言是很难的,混合三种肯定会更糟糕.我期望主要的可维护性和耦合问题.

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

这里有一些遗漏的东西:

  • 隐私
  • 接口/抽象类
  • 方法解析:重载和覆盖(特别是当多个方法匹配时)
  • 例外
  • 类型检查,或从类型错误中恢复

2.我只需要找到一些方法来用Java调用Python中的方法! 那么Jython,RPC还是只调用可执行文件呢?

  • 除了Jython之外,还有[JPype](http://jpype.sourceforge.net/),它允许您使用CPython中的Java. (2认同)