When will reflections support casting (especially for constructors, etc) properly?

B

brian.vanheesch

Consider the following code:

class A
{
}

class B extends A
{
}

class C
{
public void foobar(A a)
{
}
}

....

Object b=Class.forName("B").newInstance();

Class clazzA=Class.forName("A");
Class clazzC=Class.forName("C");
Object c=clazz.newInstance();

Method m=clazzC.getMethod("foobar", clazzA);
m.invoke(c, b);

This will result in an exception, since b is not of type A (the extend
is not considered). Anyway around this? Clearly typecasting will do,
but can't figure out how to typecast using reflection if you only have
the class string "A" as a reference of the target typecast class.

Also the private/public/protected modifier for the method (doSomething,
in this example) MUST be public (even if reflection code lives within
the class C), any around this?


PS sorry about the cheezy class names, my client does not allow
specific example code to be posted to the web.
bvh
 
T

Timbo

Consider the following code:

class A
{
}

class B extends A
{
}

class C
{
public void foobar(A a)
{
}
}

...

Object b=Class.forName("B").newInstance();

Class clazzA=Class.forName("A");
Class clazzC=Class.forName("C");
Object c=clazz.newInstance();

Method m=clazzC.getMethod("foobar", clazzA);
m.invoke(c, b);

This will result in an exception, since b is not of type A (the extend
is not considered). Anyway around this? Clearly typecasting will do,
but can't figure out how to typecast using reflection if you only have
the class string "A" as a reference of the target typecast class.
You should try running this before posting... it doesn't compile.
Even once I got it to compile, it doesn't result in an exception
for me.
Also the private/public/protected modifier for the method (doSomething,
in this example) MUST be public (even if reflection code lives within
the class C), any around this?
I suspect you mean "foobar" and not "doSomething", but I don't see
why you would want it any other way. The idea of private method is
such that objects not of the same class cannot access those methods.
 
L

Larry Barowski

Also the private/public/protected modifier for the method (doSomething,
in this example) MUST be public (even if reflection code lives within
the class C), any around this?

Method.setAccessible(boolean)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,904
Latest member
HealthyVisionsCBDPrice

Latest Threads

Top