From: Mitch A. <ma...@nc...> - 2005-03-26 00:06:56
|
Is there a straightforward method of listing the classes/interfaces present in a Java package, given an imported module? I've looked at the __dict__ keys but these include a few Jython-added keys as well, and don't know how to differentiate the Python keys from those imported from Java. vis: import javax.swing as pkg for nme in pkg.__dict__.keys(): print nme But this includes things that aren't present in the JavaDocs, like __name__, text, table, tree, & etc. |
From: Diez B. R. <de...@we...> - 2005-03-26 14:02:33
|
Am Samstag, 26. M=E4rz 2005 01:06 schrieb Mitch Amiano: > Is there a straightforward method of listing the classes/interfaces > present in a Java package, given an imported module? > AFAIK java itself doesn't support that - you can get from a class to the=20 package via reflection, but not the other way round. It bugged me several=20 times, as otherwise I'd be able to create factories much easier - just put= =20 all classes that should be creatable by a certain factory in on package, an= d=20 you'd be done. But it doesn't work - maybe if you created your own=20 classloader. Diez |
From: Lars H. <he...@se...> - 2005-03-26 14:15:48
|
Hi Mitch, > I've looked at the __dict__ keys but these include a few Jython-added > keys as well, and don't know how to differentiate the Python keys from > those imported from Java. > vis: > import javax.swing as pkg > for nme in pkg.__dict__.keys(): > print nme Unfortunally you've to filter the output. I.e. from org.python.core import PyJavaClass import javax.swing as pkg for name in dir(pkg): klass = getattr(pkg, name) if type(klass) == PyJavaClass: print 'Found a class' Untested code, though. :) Best regards, Lars -- http://semagia.com |
From: Mitch A. <ma...@nc...> - 2005-03-28 13:22:00
|
I modified the example to recurse for pyJavaPackage, and it shows me what I needed. __name__ does look like the only Jython introduced member, but package names are there as well. def pyPackageListing(pkg,stream=sys.stdout,prfx=""): for name in dir(pkg): klass = getattr(pkg, name) if type(klass) == PyJavaClass: print >>stream, prfx + name elif type(klass) == PyJavaPackage: print >>stream, "Pkg: " + name pyPackageListing(klass,stream," ") else: print >>stream, prfx + "{" + name + "}" Thanks again! Lars Heuer wrote: >Hi Mitch, > > > > >>I've looked at the __dict__ keys but these include a few Jython-added >>keys as well, and don't know how to differentiate the Python keys from >>those imported from Java. >> >> > > > >>vis: >> >> > > > >>import javax.swing as pkg >>for nme in pkg.__dict__.keys(): >> print nme >> >> > > >Unfortunally you've to filter the output. I.e. > > from org.python.core import PyJavaClass > import javax.swing as pkg > > for name in dir(pkg): > klass = getattr(pkg, name) > if type(klass) == PyJavaClass: > print 'Found a class' > > >Untested code, though. :) > > >Best regards, >Lars > > |