请注意,这与Jython @property SyntaxError: mismatched input '' expecting CLASS类似,但我使用的是Jython 2.7.0,该答案引用了2.5.2中的特定错误
我有一些Java代码,其中包含我试图在Jython中重写的注释:
@ProcessInput
public void process(SomeEvent event) {
...
}
我尝试将此方法转换为Python,只留下注释:
@ProcessInput
def process(event):
但是,由于其他帖子SyntaxError: mismatched input '' expecting CLASS
我在线阅读有关Jynx(https://code.google.com/p/jynx/)的信息并尝试了
import jynx
from java.lang import Object
from jynx.lib.junit import*
from jynx.jannotations import*
...
ProcessInput = annotation.extract(ProcessInput)
但那没有做任何事情;同样的错误。我做错了什么,或者,是否有一种简单的方法来弄清楚Java注释正在做什么,并重写Java代码,以便它不使用这个糖?
答案 0 :(得分:2)
我正在写这篇文章(最有可能是拼写错误),所以警告经纪人。
我没有太多的答案,在这个时候,Jython根本不能支持Java注释。请注意,Java注释语法与Python装饰器语法冲突。因此,如果没有Jython提供开箱即用的支持,我不知道这是如何解决的。
依赖像Jynx这样的编译器中介是IMO的绊脚石。如果没有扎实的Java注释支持,我觉得Jython将成为一个死胡同。
我很遗憾我为框架和自动化开发做了大量的Jython工作。
问题:
我做错了什么,
如果不知道执行
产生的具体错误,很难说ProcessInput = annotation.extract(ProcessInput)
Java注释就像Python装饰器。它们都提供影响,增强或以其他方式改变带注释代码执行的元数据(或生成辅助所述带注释代码的幕后代码。)
这种行为并非易事,至少在Java中,注释可能会带来更多带有所需导入的代码。在您的情况下,在尝试加载注释所依赖的类时,对annotation.extract(ProcessInput)
的这种特定调用可能会导致ClassNotFoundError。
或者,是否有一种简单的方法来弄清楚Java是什么 注释正在执行并重写Java代码,以便它不使用 这糖?
这是一项非常重要的任务,我根本不会考虑它。您必须将生成的字节码用于注释和带注释的类,将它们重新编译回Java。
然后以某种方式创建一个等同于Java注释的Python装饰器(如果可能的话),然后创建一个Jython类,它扩展了带注释的Java类,并以某种方式将装饰器装饰到它上面。
即便如此,这还不够。在Java中,请参阅由EE容器,包装器(.ie。hibernate),服务提供者(.ie。,JPA提供者)执行的注释驱动逻辑,或控制平台的反转(例如,Spring。)
我不认为这样的努力是明智的。
目前,我们可以做的最多是在Jython中扩展一个带注释的Java类(假设该类不是最终的),在Jython中进行大部分开发并使先前的Java容器(或中介)启动Java-to-Jython垫片(例如,Jython的PyServlet垫片)
尝试直接在Jython上使用Java注释是一个失败者的游戏(直到Jython的新版本带来开箱即用的支持。)
幸运的是,大多数Java注释(至少对于主要框架)都可以用XML配置覆盖。
所以,重申一下,这将是我的方法:
如果上述任何步骤都是不可能的,那么整个过程在技术上就会从一开始就死定。
祝你好运。