From: sim085 <si...@ho...> - 2006-06-23 09:29:50
|
Hello, I have read some things on Jython now, and I think I understand it's cpncept. However I just have one question? Why use Jython when you can use Java objects with Reflection? I mean are there any advanteges that Jython gives but reflection in Java doesn't. Please do not take this as an offence, it is just a question to help me understand better where jytho enters in the development environment. regards, sim085 -- View this message in context: http://www.nabble.com/Java-%28with-reflection%29-vs-Jython-t1835274.html#a5008778 Sent from the jython-users forum at Nabble.com. |
From: David P. <da...@da...> - 2006-06-23 10:20:23
|
On Jun 23, 2006 at 10:29, sim085 praised the llamas by saying: > > Hello, > > I have read some things on Jython now, and I think I understand it's > cpncept. However I just have one question? Why use Jython when you can use > Java objects with Reflection? I mean are there any advanteges that Jython > gives but reflection in Java doesn't. > > Please do not take this as an offence, it is just a question to help me > understand better where jytho enters in the development environment. jython allows you to either embed the python scripting language in your program or allows you to call java code from your python script. That's pretty much it. > > regards, > sim085 -- David Pashley da...@da... Nihil curo de ista tua stulta superstitione. |
From: Kent J. <ke...@td...> - 2006-06-23 10:23:26
|
sim085 wrote: > Hello, > > I have read some things on Jython now, and I think I understand it's > cpncept. However I just have one question? Why use Jython when you can use > Java objects with Reflection? I mean are there any advanteges that Jython > gives but reflection in Java doesn't. Jython is much more than Java plus reflection. Jython is an implementation of the Python programming language in Java, with excellent interoperability with Java classes and libraries. Many people (myself included) find programming in Python to be significantly faster, easier and more fun than programming in Java. Jython allows programs to be written in Python and still use Java classes. In my case, I work in a mostly Java shop and there are Java libraries I must use in my work, so I use Jython. For more about Python, see http://www.python.org. I have written up some of the reasons I prefer Python to Java here: http://personalpages.tds.net/~kent37/stories/00017.html Oh by the way, reflection is one of the things that is way easier in Jython than Java. Kent |
From: Diez B. R. <de...@we...> - 2006-06-23 10:36:40
|
> I have read some things on Jython now, and I think I understand it's > cpncept. However I just have one question? Why use Jython when you can > use Java objects with Reflection? I mean are there any advanteges that > Jython gives but reflection in Java doesn't. > > Please do not take this as an offence, it is just a question to help me > understand better where jytho enters in the development environment. Object target; Integer argument = new Integer(10); try { Class tc = target.getClass(); Method m = tc.getDeclaredMethod("someMethod", new Class [] {Integer.TYPE}); Object result = m.invoke(target, new Object [] {argument}); } catch (Exception ex) { throw new RuntimeException(ex); } vs. target.someMethod(10) Does that answer your question? Not to mention that python (and thus jython) is much more concise in all its language constructs than java is. Diez |
From: Kent J. <ke...@td...> - 2006-06-23 10:56:48
|
Diez B. Roggisch wrote: >> I have read some things on Jython now, and I think I understand it's >> cpncept. However I just have one question? Why use Jython when you can >> use Java objects with Reflection? I mean are there any advanteges that >> Jython gives but reflection in Java doesn't. >> >> Please do not take this as an offence, it is just a question to help me >> understand better where jytho enters in the development environment. > > Object target; > Integer argument = new Integer(10); > try { > Class tc = target.getClass(); > Method m = tc.getDeclaredMethod("someMethod", new Class [] {Integer.TYPE}); > Object result = m.invoke(target, new Object [] {argument}); > } catch (Exception ex) { > throw new RuntimeException(ex); > } > > > vs. > > target.someMethod(10) I think you mean getattr(target, "someMethod")(10) but still a great example of how Jython reflection is simpler than Java's. Kent |
From: Diez B. R. <de...@we...> - 2006-06-23 11:26:11
|
> I think you mean > getattr(target, "someMethod")(10) > but still a great example of how Jython reflection is simpler than Java's. No I didn't. Your version is needed in case where I want to call a method that I didn't know the name beforehand. But _if_ I know the name, the "usual" syntax works. One could argue that in such cases one wouldn't use reflection in Java at all - but instead cast to the desired interface. Yet I assumed the example to work in something that is supposed to be a scripting-sort of thing - using reflection in java to gain flexibility. But then jython is way better - as we certainly both agree :) Diez |
From: Fabio Z. <fa...@gm...> - 2006-06-23 11:54:07
|
On 6/23/06, Diez B. Roggisch <de...@we...> wrote: > > > I think you mean > > getattr(target, "someMethod")(10) > > but still a great example of how Jython reflection is simpler than > Java's. > > No I didn't. Your version is needed in case where I want to call a method > that > I didn't know the name beforehand. But _if_ I know the name, the "usual" > syntax works. > > One could argue that in such cases one wouldn't use reflection in Java at > all > - but instead cast to the desired interface. > > Yet I assumed the example to work in something that is supposed to be a > scripting-sort of thing - using reflection in java to gain flexibility. > But > then jython is way better - as we certainly both agree :) > Well, I have a good use-case for that then...(stumbled across it recently while doing pydev): ... if(node instanceof aliasType){ aliasType type = (aliasType) node; return ((NameTok)type.name).id; } if(node instanceof ClassDef){ ClassDef def = (ClassDef) node; return ((NameTok)def.name).id; } if(node instanceof FunctionDef){ FunctionDef def = (FunctionDef) node; return ((NameTok)def.name).id; } ... instead of ... if hasattr(node, "name"): return node.name.id I could use the reflection for the java version (I have some libraries that I use to do: REF.hasAttr() and REF.getAttr() in java, so, it might not be so bad either: if REF.hasAttr(node,"name"): return REF.getAttr(REF.getAttr(node,"name"), "id"); But it still it's not the same -- I actually had that version, but as it turned up to be one of the most called methods in pydev, I had to keep the 1st version because that approach turned out to be much slower in the recent profiling efforts in pydev ;-). Cheers, Fabio |
From: Kent J. <ke...@td...> - 2006-06-23 12:30:16
|
sim085 wrote: > Thanks for all the replies :) > > I just have a simple example to make (not even using reflection). Imagine > having an application that loads up plugins. The plugins will just return a > string. The application will then print this string on a console (or do > something with it). > > For this case I would create a seperate jar file for my application that > contains an interface called Extendable (for example). The extendable > interface would contain only one method definition, that is, getString(). I > would then make my plugins implement from the Extendable interface and > implement this getString() method to return my wanteded message. > > Using the class loader I would load all my classes that are inheriting from > Extendable (maybe I search for them in some folder) and then I just type > cast them to Extendable, and call the required method. That is: > > // Here using the class loader to load the myObject. > > Extendable e = (Extendable)myObject; > System.out.println(e.getString()); > > The above is a very simple a stupid method. But it is nearly the same as > what Jython is doing? or? I mean what advantege would jythin give me in > this scenario? I don't see any advantage to using Jython specifically to implement a plug-in system for a Java application. But I think you misunderstand what Jython is and what it is good for. You are putting it in a very limited role. You can write the whole application in Jython, or embed Jython as a scripting system within your application. You can write servlets in Jython. It is much more than a convenient way to do reflection. Kent |
From: sim085 <si...@ho...> - 2006-06-23 12:13:32
|
Thanks for all the replies :) I just have a simple example to make (not even using reflection). Imagine having an application that loads up plugins. The plugins will just return a string. The application will then print this string on a console (or do something with it). For this case I would create a seperate jar file for my application that contains an interface called Extendable (for example). The extendable interface would contain only one method definition, that is, getString(). I would then make my plugins implement from the Extendable interface and implement this getString() method to return my wanteded message. Using the class loader I would load all my classes that are inheriting from Extendable (maybe I search for them in some folder) and then I just type cast them to Extendable, and call the required method. That is: // Here using the class loader to load the myObject. Extendable e = (Extendable)myObject; System.out.println(e.getString()); The above is a very simple a stupid method. But it is nearly the same as what Jython is doing? or? I mean what advantege would jythin give me in this scenario? regards, sim085 -- View this message in context: http://www.nabble.com/Java-%28with-reflection%29-vs-Jython-t1835274.html#a5010709 Sent from the jython-users forum at Nabble.com. |
From: sim085 <si...@ho...> - 2006-06-23 13:06:27
|
hmm ... I understand better now!! so basically Jython is not aimed to make a Java application more extendable, but actually to develop application (both desktop based and web based). hmmm .. I am sorry, I started from the wrong misconseption... -- View this message in context: http://www.nabble.com/Java-%28with-reflection%29-vs-Jython-t1835274.html#a5011459 Sent from the jython-users forum at Nabble.com. |
From: Kent J. <ke...@td...> - 2006-06-23 14:12:58
|
sim085 wrote: > hmm ... I understand better now!! so basically Jython is not aimed to make a > Java application more extendable, but actually to develop application (both > desktop based and web based). One use of Jython is to make a Java application more extensible, just not in the way you thought. You can make a Java application scriptable in Jython - your plug-ins would be written in Jython instead of Java. Kent |
From: sim085 <si...@ho...> - 2006-06-26 06:51:29
|
Yes, that is how I first heard of Jython. However if I do that, I would still have to use Reflection from my Java application to use the plugins. am I wrong? Is there an example on how to acomplish this over the internet? regards, sim085 -- View this message in context: http://www.nabble.com/Java-%28with-reflection%29-vs-Jython-t1835274.html#a5042308 Sent from the jython-users forum at Nabble.com. |
From: Diez B. R. <de...@we...> - 2006-06-27 08:42:32
|
On Monday 26 June 2006 08:51, sim085 wrote: > Yes, that is how I first heard of Jython. > > However if I do that, I would still have to use Reflection from my Java > application to use the plugins. am I wrong? Yes, you are wrong. Because if your plugin-system is defined over terms of JAVA-interfaces, there is no need for reflection at all. The basic gist is MyPluginInterface plugin = Class.forName("my.plugin.Clazz").newInstance() See the various JDBC-drivers, XML-parsers and the like for how that works. Diez |