Hi all,
What's the form for asking a class for a method
with a given name, that takes an int as an argument,
and then invoking it? I have one way which works, but
it is clunky, having to get all the methods first:
void executeIntMethodOn( String methodName, Object myObj, int myInt )
{
Method[] meths = myObj.getClass().getMethods();
for (int i = 0; i < meths.length; i++)
{
if (meths[i].getName().equals(methodName))
{
System.out.println("got it");
Object[] oo = new Object[1];
oo[0] = new Integer(myInt);
meths[i].invoke( p, oo );
break;
}
}
}
If I try code like:
Integer i = new Integer(myInt);
Class[] cls = new Class[1];
cls[0] = i.getClass();
Method meth = myObj.getClass().getMethod(methodName, cls );
System.out.println("got it");
Object[] oo = new Object[1];
oo[0] = i;
meth.invoke( p, oo );
It fails to find the method, saying there is no method
of that name taking an Integer (it takes an int). I guess
my problems boils down to how to get an int's class into
the Class array.
thanks in advance,
Joe
Joe Weinstein - 17 Mar 2006 18:07 GMT
> Hi all,
> What's the form for asking a class for a method
[quoted text clipped - 36 lines]
> thanks in advance,
> Joe
And, I guess the question is academic, not performance-related.
I was hoping the Class object would keep it's methods in a
sorted order to speed up method-finding, but in looking at
the code, it seems it simply keeps an array which it copies
to return via getMethods(), and getMethod() doesn't do any-
thing faster...
Joe
Chris Uppal - 18 Mar 2006 11:27 GMT
> I guess
> my problems boils down to how to get an int's class into
> the Class array.
Either of the expressions:
Integer.TYPE
or
int.class
evaluate to the java.lang.Class object corresponding to the primitive type.
For peculiar reasons, 1.5 considers the generic "type" of the expression to be
Class<Integer>
which you may have to take account of when using the int.class object.
-- chris