From: Lars H. <he...@se...> - 2007-05-09 12:15:30
|
Hi there, In one method I have to receive a Java class (an interface) and return a concrete implementation for it. Now, I have the problem, that the following does not work: >>> def class_name(cls): return cls.getName() >>> from somepackge import SomeInterface >>> class_name(SomeInterface.class) Traceback (innermost last): File "<console>", line 1, in ? File "<console>", line 2, in class_name TypeError: getName(): expected 1 args; got 0 Is it possible to get the class name? How? Class.getName(SomeInterface.class) does not work either. Thanks and best regards, Lars -- http://www.semagia.com |
From: Pekka L. <pe...@ik...> - 2007-05-09 13:32:26
|
2007/5/9, Lars Heuer <he...@se...>: > In one method I have to receive a Java class (an interface) and return > a concrete implementation for it. Now, I have the problem, that the > following does not work: > > >>> def class_name(cls): > return cls.getName() > > >>> from somepackge import SomeInterface > >>> class_name(SomeInterface.class) > Traceback (innermost last): > File "<console>", line 1, in ? > File "<console>", line 2, in class_name > TypeError: getName(): expected 1 args; got 0 > > > Is it possible to get the class name? How? > > Class.getName(SomeInterface.class) > > does not work either. Instead of SomeInterface.class.getName() you should either SomeInterface.getName(), SomeInterface.__name__ (perhaps more Pythonic), SomeInterface.class.getName(SomeInterface) or SomeInterface.class.__name__. At least those work with java.lang.Runnable interface as shown below. Jython 2.2b1 on java1.5.0_10 (JIT: null) Type "copyright", "credits" or "license" for more information. >>> from java.lang import Runnable >>> Runnable.getName() 'java.lang.Runnable' >>> Runnable.__name__ 'java.lang.Runnable' >>> Runnable.class.getName() Traceback (innermost last): File "<console>", line 1, in ? TypeError: getName(): expected 1 args; got 0 >>> Runnable.class.getName(Runnable) 'java.lang.Runnable' >>> Runnable.class.__name__ 'java.lang.Class' >>> Cheers, .peke |
From: Lars H. <he...@se...> - 2007-05-09 13:51:26
|
Hi Pekka, >> In one method I have to receive a Java class (an interface) and return >> a concrete implementation for it. Now, I have the problem, that the >> following does not work: >> >> >>> def class_name(cls): >> return cls.getName() [...] > Instead of SomeInterface.class.getName() you should either > SomeInterface.getName(), SomeInterface.__name__ (perhaps more > Pythonic), SomeInterface.class.getName(SomeInterface) or [...] Jep, but I have to accept a class as argument (I implement a Java interface), so the Pythonic options are not available. To fulfill the Java interface contract, I have to accept a SomeInterface.class argument. :/ Any further ideas? Workarounds using the org.pyhton.core classes? I like to implement something like this: Object getObject(Class cls) { if (cls.getName().equals("somepackage.SomeInterface") { return new SomeImpl(); } else if (cls.getName().equals("somepackage.AnotherInterface") { return new AnotherImpl(); } throw new RuntimeException("bla bla"); } Thanks and best regards, Lars -- http://www.semagia.com |
From: Diez B. R. <de...@we...> - 2007-05-09 14:09:48
|
Today 16:04:00 =A0 On Wednesday 09 May 2007 15:55, Lars Heuer wrote: > Hi Pekka, > > >> In one method I have to receive a Java class (an interface) and return > >> a concrete implementation for it. Now, I have the problem, that the > >> > >> following does not work: > >> =A0 =A0 >>> def class_name(cls): > >> > >> =A0 =A0 =A0 =A0 =A0 =A0 return cls.getName() > > [...] > > > Instead of SomeInterface.class.getName() you should either > > SomeInterface.getName(), SomeInterface.__name__ (perhaps more > > Pythonic), SomeInterface.class.getName(SomeInterface) or > > [...] > > Jep, but I have to accept a class as argument (I implement a Java > interface), so the Pythonic options are not available. > To fulfill the Java interface contract, I have to accept a > SomeInterface.class argument. :/ I'm not sure if you or we understand what's happening here. What in Java is=20 =46oo.class=20 becomes a simple =46oo in jython. Which means that when your class_name-function is somehow invoke= d=20 like this // java Class cls =3D Foo.class; interpreter.set("cls", cls); interpreter.exec("print class_name(cls)") things should work as expected. Diez |
From: Lars H. <he...@se...> - 2007-05-09 14:27:27
|
Hi Diez, [...] > I'm not sure if you or we understand what's happening here. > What in Java is > Foo.class > becomes a simple > Foo > in jython. Which means that when your class_name-function is somehow invoked Arrrg.... My fault. I wrote a test case in Jython and used "Foo.class" and I never got my expected result. Thanks! :) Best regards, Lars -- http://www.semagia.com |
From: Pekka L. <pe...@ik...> - 2007-05-09 14:27:05
|
2007/5/9, Lars Heuer <he...@se...>: > >> In one method I have to receive a Java class (an interface) and return > >> a concrete implementation for it. Now, I have the problem, that the > >> following does not work: > >> > >> >>> def class_name(cls): > >> return cls.getName() > [...] > > Instead of SomeInterface.class.getName() you should either > > SomeInterface.getName(), SomeInterface.__name__ (perhaps more > > Pythonic), SomeInterface.class.getName(SomeInterface) or > [...] > > Jep, but I have to accept a class as argument (I implement a Java > interface), so the Pythonic options are not available. > To fulfill the Java interface contract, I have to accept a > SomeInterface.class argument. :/ When you do "from somepackage import SomeInterface" I think you actually already get a class. So just passing SomeInterface forward ought to be enough. >>> from java.lang import Runnable >>> type(Runnable) <type 'javaclass'> > Any further ideas? Workarounds using the org.pyhton.core classes? I don't know about that, sorry. > I like to implement something like this: > > Object getObject(Class cls) { > if (cls.getName().equals("somepackage.SomeInterface") { > return new SomeImpl(); > } > else if (cls.getName().equals("somepackage.AnotherInterface") { > return new AnotherImpl(); > } > throw new RuntimeException("bla bla"); > } That ought to work if you just pass your SameInterface. At least following seems to work ok. >>> from java.lang import Runnable >>> from java.io import Serializable >>> >>> class Runner(Runnable): ... def run(self): ... pass ... >>> class Serializer(Serializable): ... pass ... >>> >>> def getObject(cls): ... if cls.getName() == 'java.lang.Runnable': ... return Runner() ... elif cls.getName() == 'java.io.Serializable': ... return Serializer() ... else: ... raise Exception, "bla bla" ... >>> >>> getObject(Runnable) <__main__.Runner instance 2> >>> getObject(Serializable) <__main__.Serializer instance 3> >>> Cheers, .peke |
From: Lars H. <he...@se...> - 2007-05-09 14:36:27
|
Hi Pekka, [...] > That ought to work if you just pass your SameInterface. At least > following seems to work ok. Yes, thanks. :) I used Java notation for a Jython test case and got the wrong results. Everything works fine now. Best regards, Lars -- http://www.semagia.com |
From: jh <jo...@da...> - 2007-05-09 20:23:20
|
I have a maxq script (jython) that I wanted to pause so I tried using input and raw_input statements. They both cause my script to hang regardless of input and I can do nothing more till I kill the task. Ideas? Thanks, jh |
From: Carl C. <car...@gm...> - 2007-05-09 21:02:02
|
To pause for 13 seconds: import time time.sleep(13) Cheers, Carl. On 10/05/07, jh <jo...@da...> wrote: > I have a maxq script (jython) that I wanted to pause so I tried using input > and raw_input statements. They both cause my script to hang regardless of > input and I can do nothing more till I kill the task. > > Ideas? > > Thanks, > > jh > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > Jython-users mailing list > Jyt...@li... > https://lists.sourceforge.net/lists/listinfo/jython-users > |
From: jh <jo...@da...> - 2007-05-09 21:52:25
|
Thanks for posting. My mistake. I should have stated that I want to pause the program indefinitely, maybe 20 seconds, maybe 5 minutes. But your idea is helpful. jh |