Article View: comp.lang.java.programmer
Article #332Re: Bug in Class class?????
From: rudnicki
Date: Sat, 29 Nov 1997 00:00
Date: Sat, 29 Nov 1997 00:00
112 lines
4111 bytes
4111 bytes
Carl Hewitt wrote:
>
> The isInstance method of the Class class does not seem to work (as does
> the getClasses() and getDeclaredClasses() The following code returns false
> for all three statements)
>
> public class MyClass1 {
> public static void main(String[] args) {
> System.out.println(b.class.isInstance(a.class));
> System.out.println(a.class.isInstance(a1.class));
> System.out.println(b.class.isInstance(a1.class));
> }
> }
Carl, I did some experimenting. I think the .class operator (what is
that thing? a
member containing this?) does indeed work as seen if you run the snip
below. It seems
reasonable that the Class objects that are created by the loader are not
instances of each
other.
A someone else mentioned, the question the above code is asking is known
at compile time. That
means you should know. There is use for compiler directives (e.g.
sizeof() in C) but maybe the
class heirarchy can't be explored without creating an instance of the
class. Given the way classes
are dynamically loaded, this makes sense.
hope this helps,
Jim
public static void main(String[] args)
{
Class_a instance_a = null;
Class_b instance_b = null;
Object instance_x = null;
Object instance_y = null;
/* all false - a sub class is not an instance of.
From my copy of Java in a nutshell -
"There is one Class object for each class that is
loaded into the Java Virtual Machine."
Thereby, Class_x.class returns a reference to a _Class_ object.
This reference gets passed to the isInstance() function.*/
System.out.print("All false ");
System.out.print(Class_b.class.isInstance(Class_a.class));
System.out.print(Class_a.class.isInstance(Class_a1.class));
System.out.println(Class_b.class.isInstance(Class_a1.class));
instance_a = new Class_a();
instance_b = new Class_b();
System.out.print("A is A B is B? (y y) ");
System.out.print(instance_b.getClass().isInstance(instance_b2));
System.out.print(" ");
System.out.println(instance_a.getClass().isInstance(instance_a2));
System.out.print("B is a A ? (y y) ");
System.out.print(instance_a.getClass().isInstance(instance_b));
System.out.print(" ");
System.out.println(Class_a.class.isInstance(instance_b));
System.out.print("A is a B ? (n n) ");
System.out.print(instance_b.getClass().isInstance(instance_a));
System.out.print(" ");
System.out.println(Class_b.class.isInstance(instance_a));
instance_x = (Object)instance_a;
instance_y = (Object)instance_b;
System.out.println("Set instance_x = instance_a");
System.out.println("Set instance_y = instance_b");
System.out.print("instance x is Class_a ? (y) ");
System.out.println(Class_a.class.isInstance(instance_x));
System.out.print("instance x is Class_b ? (n) ");
System.out.println(Class_b.class.isInstance(instance_x));
System.out.print("instance y is Class_b ? (y) ");
System.out.println(Class_b.class.isInstance(instance_y));
System.out.print("instance y is Class_a ? (y) ");
System.out.println(Class_a.class.isInstance(instance_y));
System.out.print("instance y is Class_a1 ? (y) ");
System.out.println(Class_a1.class.isInstance(instance_y));
return;
}
}
class Class_a implements Class_a1
{
public Class_a()
{
}
}
class Class_b extends Class_a
{
public Class_b()
{}
}
interface Class_a1
{
}
Technical Details
Message-ID:
<348115F0.6492@best.com>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<34801D17.4EA42334@oop.com>Show Full Headers
Complete Article Headers
X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 10a146,2efc8c35cff1956f X-Google-Attributes: gid10a146,public X-Google-Thread: 1089d0,2efc8c35cff1956f X-Google-Attributes: gid1089d0,public X-Google-Thread: f74b3,2efc8c35cff1956f X-Google-Attributes: gidf74b3,public From: rudnicki@best.com Subject: Re: Bug in Class class????? Date: 1997/11/29 Message-ID: <348115F0.6492@best.com> X-Deja-AN: 293840426 References: <34801D17.4EA42334@oop.com> Organization: None Newsgroups: comp.lang.java.programmer,borland.public.jbuilder.java.language,borland.public.jbuilder.java.api