翻译Java注释

时间:2015-10-15 00:15:22

标签: annotations jython

请注意,这与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代码,以便它不使用这个糖?

1 个答案:

答案 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配置覆盖。

所以,重申一下,这将是我的方法:

  1. 识别和部署支持注释所需的容器
  2. 确定必要的Java-to-Jython垫片(.ie.PyServlet)或编写自己的(我们必须在工作中这样做,不是微不足道,但并非不可能。)
  3. 使用Jython类扩展带注释的Java类
  4. 使用xml
  5. 覆盖注释默认值

    如果上述任何步骤都是不可能的,那么整个过程在技术上就会从一开始就死定。

    祝你好运。