用Python生成Java的最佳方法是什么?

5

如何用Python生成Java代码?

我想编写一个装饰器,生成调用函数的Java代码(我可以使用现有的装饰器导出JSON API)。

最好的方法是什么,我应该考虑像FSMs这样的东西吗?

理想情况下,我只需编写一次代码即可为服务器生成与之交互的多种语言代码(首先是Java)。

编辑(从已删除答案的评论中提取):
Java代码将在Android上运行,而Python代码将在Django服务器上运行... 此外,我希望能够静态生成Java代码,并将其作为API的一部分供人们使用。


1
最好的方法是如果可以避免的话,不要生成这么复杂的东西。不过有一个提示:据我所知,从类似于抽象语法树(AST)的东西中生成正确的(不太可读但是正确的)代码相对来说比其他所有可能性都要“简单”一些,至少如果你很了解这个树形格式(以及它代表的含义)的话。这基本上意味着需要实现 Java 编译器的一半。 - user395760
那么你的服务器会生成一些Java(字节?)代码,供Android用户执行以获取一些JSON数据? - Nick T
显然,能够生成Java代码的部分只有在我们决定更改API时才会运行,而不是一直运行 :) - Stuart Axon
@delnan,AST 确实看起来很不错,也许我可以使用 Jython 中的 Java AST。 - Stuart Axon
3个回答

2
您可以像Web应用程序创建HTML一样创建Java代码:使用模板。然后,您可以使用常规的Java编译器(请参见:javax.tools包)将Java源代码编译为字节码。
这可能不是最佳选择,但绝对是一个选择(而且相当简单)。

可以做...我以前生成过这样的代码,但并不总是很漂亮。 - Stuart Axon

1

重复使用是好的。复杂度则是代价。

这将会导致你之后付出一倍或更多的代价。在跨出这一步之前,衡量你的投资回报率(ROI)。

[编辑:]

  1. 你可以使用Jython,它能够轻松地编写调用Java函数的粘合代码。
  2. jythonc 将Python源代码转换为Java源代码,然后调用Java编译器将其转换为.class文件。
  3. 正如所说,你可以使用模板。有人曾经使用cheetah来实现这个目的。尽管链接已经无法访问了。

1
网络编程可能是一个噩梦般的调试过程,生成所有这些粘合剂将节省很多麻烦。 - Stuart Axon
@Stuart Axon:+1 非常正确!我完全不反对。我们必须成为这方面的裁判。然而,我看到有些人为了赶时间而付出了代价,特别是在使用粘合代码时。这真的取决于所要实现的内容。JSON API的复杂性与粘合代码的复杂性相比如何。我只是有一种直觉,即Python拥有出色的工具,因此JSON API的复杂性会更小。 - pyfunc
我主要考虑的是生成从Java/Android调用代码,而不是Python方面的问题。我会调查Jythonc……目前我处于调查阶段,如果这似乎是一条死路,那么损失也不会太大。 - Stuart Axon

-2

我的建议是?让它生成JavaScript代码而不是Java代码。Android可以使用 WebView来执行JavaScript代码。


确实,我不确定这是否可以作为服务运行。 - Stuart Axon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接