如何在Jython解释器中将Jython类转换为Java类?
我正在尝试使用Esper API注册一个用户自定义函数。这个函数需要一个类或者字符串类型的参数。
这个链接可以查看相关文档。
class MyUdf():
@staticmethod
def udf():
return 50
conf.addImport(myudf.getClass().getName())
出现的错误信息是:
AttributeError: class MyUdf has no attribute 'getClass'
我可以通过以下方式导入Java类:
from java.lang import Math
conf.addImport(Math)
@larsmans: class 似乎只存在于Java的Class类中。
class MyUdf():
@staticmethod
def udf():
return 50
def main():
a = 'abc'
print a.__class__
u = MyUdf
print u.__class__
Traceback (most recent call last):
line 79, in main print u.__class__ AttributeError: class MyUdf has no attribute '__class__'
1 个回答
0
我觉得这可能不太行。Jython的类和Java的类不一样,按照我所了解的,没有纯Jython的方法可以强行把它们搞在一起。
一般来说,我建议你可以参考一下Jython书里提到的对象工厂方法,这里有链接,然后结合一个代理类,这样你就可以把它作为参数传递。
不过,这种方法需要写很多Java代码,而在你的情况下,直接用Java写MyUdf类可能会简单得多,这样就可以解决问题了。
另外,你也许可以尝试动态生成字节码,但那又是一个全新的复杂领域……