如何在Jython解释器中将Jython类转换为Java类?

2 投票
1 回答
1433 浏览
提问于 2025-04-16 04:56

我正在尝试使用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类可能会简单得多,这样就可以解决问题了。

另外,你也许可以尝试动态生成字节码,但那又是一个全新的复杂领域……

撰写回答