翻译 Java 个注释
Translating Java annotations
请注意,这与 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):
但是由于另一个 post、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 代码,使其不使用这种糖?
我是随手写下的(很可能有错别字),所以买者慎入。
除了目前 Jython 根本无法支持 Java 注释之外,我没有太多答案。请注意,Java 注释语法与 Python 装饰器语法冲突。因此,如果 Jython 不提供开箱即用的支持,我什至看不出这是如何解决的。
不得不依赖像 Jynx 这样的编译器中介是 IMO 的一个绊脚石。如果没有可靠的 Java 注释支持,我觉得 Jython 将成为死胡同。
鉴于 我为框架和自动化开发做了大量的 Jython 工作。
针对您的问题:
What am I doing wrong,
不知道你执行
产生的具体错误就不好说了
ProcessInput = annotation.extract(ProcessInput)
Java 注释就像 Python 装饰器。它们都提供影响、增强或以其他方式改变注释代码执行(或辅助所述注释代码的幕后代码的生成)的元数据。
这种行为并不微不足道,至少在 Java 中,注释可能会带来更多需要导入的代码。在您的情况下,这个对 annotation.extract(ProcessInput)
的特定调用可能会在尝试加载 classes 注释时导致 ClassNotFoundError。
or alternatively, is there an easy way to figure out what the Java
annotation is doing and rewrite the Java code so that it does not use
this sugar?
这是一项非常重要的任务,我根本不会考虑它。您将不得不为注释和注释的 class 获取生成的字节码,将它们反编译回 Java。
然后以某种方式创建一个等同于 Java 注释的 Python 装饰器(如果可能的话),然后创建一个扩展注释的 [=67] 的 Jython class =] class 并以某种方式将装饰器塞进它。
即便如此,这还不够。请参阅,在 Java 中,注释驱动逻辑由 EE 容器、包装器(即休眠)、服务提供者(即 JPA 提供者)或控制反转平台(例如,Spring.)
我不认为这样的努力是明智的。
目前我们最多可以做的是在 Jython 中扩展带注释的 java class(假设 class 不是最终的),完成大部分开发工作在 Jython 中并有先决条件 Java 容器(或中介)启动一个 Java-to-Jython shim(例如,Jython 的 PyServlet shim)
目前尝试直接在 Jython 上使用 Java 注释是失败者的游戏(直到新版本的 Jython 出现开箱即用的支持。)
幸运的是,大多数 Java 注释(至少对于主要框架而言)可以用 XML 配置覆盖。
所以,重申一下,这将是我的方法:
- 识别并部署支持注释所需的容器
- 确定必要的 Java-to-Jython shim(即 PyServlet)或编写您自己的(我们必须在工作中这样做,不是微不足道的,但并非不可能。)
- 使用 Jython classes
扩展带注释的 Java classes
- 用xml
覆盖注释默认值
如果上述任何步骤都不可能,那么整个努力从技术上讲就从一开始就失败了。
祝你好运。
请注意,这与 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):
但是由于另一个 post、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 代码,使其不使用这种糖?
我是随手写下的(很可能有错别字),所以买者慎入。
除了目前 Jython 根本无法支持 Java 注释之外,我没有太多答案。请注意,Java 注释语法与 Python 装饰器语法冲突。因此,如果 Jython 不提供开箱即用的支持,我什至看不出这是如何解决的。
不得不依赖像 Jynx 这样的编译器中介是 IMO 的一个绊脚石。如果没有可靠的 Java 注释支持,我觉得 Jython 将成为死胡同。
鉴于 我为框架和自动化开发做了大量的 Jython 工作。
针对您的问题:
What am I doing wrong,
不知道你执行
产生的具体错误就不好说了ProcessInput = annotation.extract(ProcessInput)
Java 注释就像 Python 装饰器。它们都提供影响、增强或以其他方式改变注释代码执行(或辅助所述注释代码的幕后代码的生成)的元数据。
这种行为并不微不足道,至少在 Java 中,注释可能会带来更多需要导入的代码。在您的情况下,这个对 annotation.extract(ProcessInput)
的特定调用可能会在尝试加载 classes 注释时导致 ClassNotFoundError。
or alternatively, is there an easy way to figure out what the Java annotation is doing and rewrite the Java code so that it does not use this sugar?
这是一项非常重要的任务,我根本不会考虑它。您将不得不为注释和注释的 class 获取生成的字节码,将它们反编译回 Java。
然后以某种方式创建一个等同于 Java 注释的 Python 装饰器(如果可能的话),然后创建一个扩展注释的 [=67] 的 Jython class =] class 并以某种方式将装饰器塞进它。
即便如此,这还不够。请参阅,在 Java 中,注释驱动逻辑由 EE 容器、包装器(即休眠)、服务提供者(即 JPA 提供者)或控制反转平台(例如,Spring.)
我不认为这样的努力是明智的。
目前我们最多可以做的是在 Jython 中扩展带注释的 java class(假设 class 不是最终的),完成大部分开发工作在 Jython 中并有先决条件 Java 容器(或中介)启动一个 Java-to-Jython shim(例如,Jython 的 PyServlet shim)
目前尝试直接在 Jython 上使用 Java 注释是失败者的游戏(直到新版本的 Jython 出现开箱即用的支持。)
幸运的是,大多数 Java 注释(至少对于主要框架而言)可以用 XML 配置覆盖。
所以,重申一下,这将是我的方法:
- 识别并部署支持注释所需的容器
- 确定必要的 Java-to-Jython shim(即 PyServlet)或编写您自己的(我们必须在工作中这样做,不是微不足道的,但并非不可能。)
- 使用 Jython classes 扩展带注释的 Java classes
- 用xml 覆盖注释默认值
如果上述任何步骤都不可能,那么整个努力从技术上讲就从一开始就失败了。
祝你好运。