【问题标题】:Translating Java annotations翻译 Java 注释
【发布时间】:2015-10-15 00:15:22
【问题描述】:

请注意,这类似于 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 代码使其不使用这种糖?

【问题讨论】:

    标签: annotations jython


    【解决方案1】:

    我是在脑海中写下这个(很可能是拼写错误),所以请注意

    除了目前 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 装饰器(如果这甚至可能的话),然后创建一个扩展带注释的 Java 类的 Jython 类,并以某种方式将装饰器硬塞给它。

    即便如此,这还不够。请看,在 Java 中,注释驱动由 EE 容器、包装器(即 hibernate)、服务提供者(即 JPA 提供者)或控制反转平台(例如 Spring)执行的逻辑。

    我不认为这样的努力是明智的。

    此时,我们最多可以做的是在 Jython 中扩展一个带注释的 Java 类(假设该类不是最终的),在 Jython 中完成大部分开发工作,并让先决条件 Java 容器(或中介)启动一个Java-to-Jython shim(例如,Jython 的 PyServletshim)

    目前尝试直接在 Jython 上使用 Java 注释是失败的游戏(直到新版本的 Jython 出现开箱即用的支持。)

    幸运的是,大多数 Java 注释(至少对于主要框架而言)都可以被 XML 配置覆盖。

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

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

    如果上述任何步骤都不可行,那么从技术上讲,整个努力从一开始就死了。

    祝你好运。

    【讨论】:

      猜你喜欢
      • 2013-05-06
      • 1970-01-01
      • 2015-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 2015-05-11
      相关资源
      最近更新 更多