Передача объекта java в python
Я прототипирую интерфейс для нашего приложения, чтобы позволить другим людям использовать python, наше приложение написано на java. Я хотел бы передать некоторые из наших данных из приложения java в код python, но я не уверен, как передать объект python. Я сделал простой вызов функции java - >python, используя простые параметры с помощью Jython, и нашел его очень полезным для того, что я пытаюсь сделать. Учитывая класс ниже, как я могу использовать его в Python/Jython в качестве входных данных для функция/класс:
public class TestObject 
{
   private double[] values;
   private int length;
   private int anotherVariable;
   //getters, setters
 }
            3 ответов
одно решение. Вы можете использовать какую-то систему сообщений, очередь или брокера для сериализации/десериализации или передачи сообщений между python и java. Затем создайте некоторого рода рабочих / производителей / потребителей, чтобы поместить работу в очереди для обработки в python или java.
также рассмотрите возможность проверки на вдохновение:https://www.py4j.org/
py4j активно используется для pyspark и Hadoop вещи типа.
чтобы ответить на ваш вопрос более немедленно.
пример использования json-простой.:
import org.apache.commons.io.FileUtils;
import org.json.simple.JSONObject;
 //import org.json.simple.JSONObject;
public class TestObject 
{
   private double[] values;
   private int length;
   private int anotherVariable;
   private boolean someBool;
   private String someString;
   //getters, setters
   public String toJSON() {
       JSONObject obj=new JSONObject();
       obj.put("values",new Double(this.values));
       obj.put("length",new Integer(this.length));
       obj.put("bool_val",new Boolean(this.SomeBool));
       obj.put("string_key",this.someString);
       StringWriter out = new StringWriter();
       obj.writeJSONString(out);
       return out.toString();
   }
   public void writeObject(){
          Writer writer = new BufferedWriter(
                              new OutputStreamWriter(
                                  new FileOutputStream("anObject.json"), "utf-8")
                              )
                           )
          writer.write(this.toJSON());
   }
   public static void setObject(){
       values = 100.134;
       length = 12;
       anotherVariable = 15;
       someString = "spam";
   }
 }
и в python:
class DoStuffWithObject(object):
    def __init__(self,obj):
        self.obj = obj
        self.changeObj()
        self.writeObj()
    def changeObj(self):
        self.obj['values'] = 100.134;
        self.obj['length'] = 12;
        self.obj['anotherVariable'] = 15;
        self.obj['someString'] = "spam";
    def writeObj(self):
        ''' write back to file '''
        with open('anObject.json', 'w') as f:
            json.dump(self.obj, f)
    def someOtherMethod(self, s):
       ''' do something else '''
       print('hello {}'.format(s))
import json
with open('anObject.json','r') as f:
    obj = json.loads(f.read())
# print out obj['values'] obj['someBool'] ...
for key in obj:
    print(key, obj[key])
aThing = DoStuffWithObject(obj)
aThing.someOtherMethod('there')
а затем в java прочитал объект. Существуют решения, реализующие эту идею (JSON-RPC, XML-RPC и варианты). В зависимости от этого вы можете также рассмотреть возможность использования чего-то вроде (http://docs.mongodb.org/ecosystem/drivers/java/ ) преимущество в том, что монго делает формат JSON.
посмотреть:
- https://spring.io/guides/gs/messaging-reactor/
 - http://spring.io/guides/gs/messaging-rabbitmq/
 - http://spring.io/guides/gs/scheduling-tasks/
 - Сельдерей как Java-проектов
 - джедаев
 - RabbitMQ
 - ZeroMQ
 
A более полный список очередей:
ссылки на ресурсы:
согласен с ответом ниже. Я думаю, что суть в том, что " Python и Java являются отдельными средами интерпретатора."Поэтому вы не должны ожидать передачи" an объект
вам нужно сделать файл python exe с помощью py2exe, обратитесь по ссылке:https://www.youtube.com/watch?v=kyoGfnLm4LA. Затем используйте программу на java и передайте аргументы:
пожалуйста, обратитесь по этой ссылке, она будет иметь детали: