Message578

Author francisd
Recipients
Date 2002-02-17.14:38:51
SpamBayes Score
Marked as misclassified
Message-id
In-reply-to
Content
The object resulting from cl =
java.lang.Class.forName('java.lang.Class') should be an
instance of java.lang.Class and therefore have the
methods and properties of java.lang.Class.  For
example, cl.name should be 'java.lang.Class'.  However,
cl.name causes an AttributeError:
>>> import java.lang
>>> cl = java.lang.Class.forName('java.lang.Class')
>>> cl.name
Traceback (innermost last):
  File "<console>", line 1, in ?
AttributeError: instance attr: name
>>> cl.getName()
Traceback (innermost last):
  File "<console>", line 1, in ?
TypeError: getName(): expected 1 args; got 0
>>> cl.methods
Traceback (innermost last):
  File "<console>", line 1, in ?
AttributeError: instance attr: methods
>>> 

java.lang.Class.forName() works OK for other classes
though, for example:
>>> import java.lang
>>> al = java.lang.Class.forName('java.util.ArrayList')
>>> al.name
'java.util.ArrayList'
>>> al.getName()
'java.util.ArrayList'
>>> al.methods
array([public final native void
java.lang.Object.wait(long) throws
java.lang.InterruptedException, public final void
java.lang.Object.wait(long,int) throws
java.lang.InterruptedException, public final void
java.lang.Object.wait() throws
java.lang.InterruptedException, public final native
java.lang.Class java.lang.Object.getClass(), public
final native void java.lang.Object.notify(), public
final native void java.lang.Object.notifyAll(), public
java.lang.String
java.util.AbstractCollection.toString(), public boolean
java.util.AbstractCollection.remove(java.lang.Object),
public boolean
java.util.AbstractCollection.containsAll(java.util.Collection),
public boolean
java.util.AbstractCollection.removeAll(java.util.Collection),
public boolean
java.util.AbstractCollection.retainAll(java.util.Collection),
public int java.util.AbstractList.hashCode(), public
boolean
java.util.AbstractList.equals(java.lang.Object), public
java.util.Iterator java.util.AbstractList.iterator(),
public java.util.List
java.util.AbstractList.subList(int,int), public
java.util.ListIterator
java.util.AbstractList.listIterator(), public
java.util.ListIterator
java.util.AbstractList.listIterator(int), public
java.lang.Object java.util.ArrayList.clone(), public
int java.util.ArrayList.indexOf(java.lang.Object),
public int
java.util.ArrayList.lastIndexOf(java.lang.Object),
public java.lang.Object java.util.ArrayList.get(int),
public java.lang.Object
java.util.ArrayList.set(int,java.lang.Object), public
boolean java.util.ArrayList.add(java.lang.Object),
public void
java.util.ArrayList.add(int,java.lang.Object), public
int java.util.ArrayList.size(), public
java.lang.Object[] java.util.ArrayList.toArray(),
public java.lang.Object[]
java.util.ArrayList.toArray(java.lang.Object[]), public
boolean java.util.ArrayList.contains(java.lang.Object),
public void java.util.ArrayList.clear(), public
java.lang.Object java.util.ArrayList.remove(int),
public boolean java.util.ArrayList.isEmpty(), public
void java.util.ArrayList.trimToSize(), public void
java.util.ArrayList.ensureCapacity(int), public boolean
java.util.ArrayList.addAll(java.util.Collection),
public boolean
java.util.ArrayList.addAll(int,java.util.Collection)],
java.lang.reflect.Method)
>>> 

Also, using Class.forName("java.lang.Class") works OK
in plain java - see attached ForNameTest.java
[francis@gecko java]$ java ForNameTest 
cl.getName() = java.lang.Class
cl.getMethods() = [Ljava.lang.reflect.Method;@6ec612
[francis@gecko java]$

So it seems that jython is getting confused when it has
an instance of java.lang.Class for java.lang.Class
itself.

I am using jython 2.1 (final), and have tested on Sun
JDK 1.3.1 on Linux 2.4.14 and Sun JDK 1.3.0 on Windows
2000 SP2
History
Date User Action Args
2008-02-20 17:17:01adminlinkissue518758 messages
2008-02-20 17:17:01admincreate