2010-10-03 4 views
2

J'essaie d'enregistrer une fonction définie par l'utilisateur avec l'API Esper. Il prend un type classe ou une chaîne arguementComment obtenir la conversion d'une classe Jython en classe Java dans Jython intepreter?

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()) 

Le message d'erreur

AttributeError: class MyUdf has no attribute 'getClass' 

Je peux importer la classe java par

from java.lang import Math 
conf.addImport(Math) 

@larsmans: classe semble n'existe que dans la classe Java Classe

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

Est-ce que 'conf.addImport (MyUdf)' travailler? –

+0

@Richard: Ne fonctionne pas – zmx

Répondre

0

Je ne pense pas que ce soit possible. Les classes Jython ne sont pas des classes Java, et pour autant que je sache, il n'y a pas de mécanisme pure-jython pour le corroborer.

Généralement, je dirais que vous devriez prendre la méthode d'usine d'objet mentioned in the Jython book, et combiner avec une classe de proxy, qui est ce que vous passeriez comme paramètre.

Cependant, cette méthode implique d'écrire beaucoup de Java, et il semble que dans votre cas, il serait plus simple d'écrire simplement la classe MyUdf en Java et d'en finir avec elle.

Sinon, vous pourriez être en mesure de faire quelque chose avec la génération de bytecode dynamique, mais c'est un nouveau trou de lapin entier ...