Мой интерфейс Python-Java, хороший дизайн?А как обернуть функции JNI? - PullRequest
6 голосов
/ 10 ноября 2011

Я собираюсь написать свой собственный интерфейс Python-Java.Он скомпилирован как DLL и упакован с использованием ctypes.

Тем не менее, можно найти Java-классы и выделить Java-объекты.Но что было бы интерфейсом к другому языку без использования этих методов объектов?Моя цель - сделать это как можно более естественным.К сожалению, просто невозможно найти Java-методы только по имени.

Моя модель следующая:

JClass

  • Экземпляр этого класса представляет класс Java.

JObject

  • Экземпляр этого класса представляет объект Java.Он должен быть инициализирован экземпляром JClass.(но, конечно, позже должны быть аргументы и для конструктора.)

JMethod

  • Представляет метод Java-объекта.Он содержит имя и подпись нужного метода.Сигнатура динамически оценивается классами, указанными при инициализации.

    Пример:

    mainMethod  = JMethod('main', JStringArray)
    

    Обратите внимание, что JStringArray является экземпляром JClass, представляющим массив строк.

    JMethod может быть добавлен к экземпляру JClass.Но тогда может быть вызван только из экземпляра JObject.

JStaticMethod

  • Точно так же, как JMethod, но его также можно вызвать из экземпляра JClass.1040 *

Встроенные типы

  • Я делаю JInt, JShort, JLont, JChar и т. Д., Чтобы бытьтипы встроенных упаковщиков.

    Как:

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

Вопрос (ы) :

  1. ЧтоВы думаете об этом проекте?
  2. Функции JNI для вызова методов Java-класса / -объекта принимают переменное количество аргументов.После прочтения нескольких тем о вызове функции с переменными аргументами из функции, которая делает это, а также о том, что здесь мы задали вопрос о SO, я понимаю, что это невозможно.
    Теперь есть функции, которые не принимаютпеременное число аргументов, но va_list или что-то еще?Мне просто нужно найти способ вызова метода из Python в Java!

1 Ответ

11 голосов
/ 15 ноября 2011

1. Что я думаю об этом дизайне?

  • Непонятно, какую именно проблему вы пытаетесь решить.

  • как насчет краевых случаев; обработка ошибок; Форвард / обратной совместимости; ошибки в Python / Java? Не весело, но важно для надежного программного обеспечения.

  • смешивать два языка достаточно сложно, смешивание трех наверняка будет намного хуже. Я ожидаю серьезных проблем с ремонтопригодностью и сцеплением.

  • уже есть решения этих проблем. RPC, для получения программ на разных языках для общения друг с другом. Jython, для взаимодействия Java / Python. Я считаю, что Jython даже позволяет вам создавать объекты Python в Java и наоборот. Было бы полезно выяснить любые недостатки этих существующих систем и то, как вы бы их исправили.

Вот несколько пропущенных вещей:

  • пакеты
  • конфиденциальность
  • интерфейсы / абстрактные классы
  • разрешение метода: перегрузки и переопределения (особенно, когда более чем один метод будет соответствовать)
  • Исключения
  • проверка типа или восстановление после ошибок типа

2. Мне просто нужно найти способ вызова метода из Python в Java! А как насчет Jython, RPC или просто вызова исполняемого файла?

...