Как преобразовать класс Jython в класс Java в интерпретаторе Jython?

Я пытаюсь зарегистрировать определяемую пользователем функцию с помощью Esper API. Требуется аргумент типа класса или строки

http://esper.codehaus.org/esper-4.0.0/doc/api/com/espertech/esper/client/ConfigurationOperations.html#addImport(java.lang.String)

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__' 

person zmx    schedule 03.10.2010    source источник
comment
conf.addImport(MyUdf) работает?   -  person Richard Fearn    schedule 03.10.2010


Ответы (1)


Я не думаю, что это возможно. Классы Jython не являются классами Java, и, насколько я могу судить, нет механизма чистого jython, чтобы заставить его.

Как правило, я бы сказал, что вы должны использовать метод фабрики объектов , упомянутый в книгу Jython и объединить с прокси-классом, который вы бы передали в качестве параметра.

Однако этот метод включает в себя написание большого количества Java, и кажется, что в вашем случае было бы проще просто написать класс MyUdf на Java и покончить с этим.

В качестве альтернативы вы могли бы сделать что-то с динамической генерацией байт-кода, но это совершенно новая кроличья нора...

person itsadok    schedule 27.10.2010