Есть ли способ создания класса Python из Java с использованием Jython * без * того, чтобы этот класс Python расширял интерфейс Java?

Все примеры в документации Jython здесь требуют, чтобы класс Python импортировал соответствующий интерфейс Java, например:

# A python module that implements a Java interface to
# create a building object
from org.jython.book.interfaces import BuildingType

class Building(BuildingType):
    def __init__(self, name, address, id):
        self.name = name
        self.address = address
        self.id = id
        ...

Я бы предпочел не связывать мой код Python с моим кодом Java. Есть ли способ, которым я могу создать экземпляр класса Python из Java, не изменяя его, чтобы он указывал на интерфейс Java?

1 ответ

Наилучшим ответом, который я смог придумать, было внедрение Java-оболочек для каждого класса Python, который я хочу создать. Каждая оболочка Java содержит PyObject, но предоставляет статически типизированный доступ к своим полям, например

public class PeanutWrapper{
  private PyObject pyObj;

  public String getKind(){
    return pyObj.__findattr__("kind");
  }

  ...
}

Это работает, но это не такое элегантное решение, как я надеялся найти.

Другие вопросы по тегам