Как получить преобразовать класс Jython в класс Java в интерпретаторе Jython? - PullRequest
2 голосов
/ 03 октября 2010

Я пытаюсь зарегистрировать пользовательскую функцию в 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__' 

1 Ответ

0 голосов
/ 27 октября 2010

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

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

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

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

...