How to get parameter names with Java reflection [duplicate]
Asked Answered
M

3

5

How do I get method signatures with Java reflection?

EDIT: I actually need the parameter NAMES not the types of a method.

Moseley answered 31/1, 2012 at 14:30 Comment(0)
D
10

To get the method i of a class C you call C.class.getMethods()[i].toString().

EDIT: Obtaining parameter names is not possible using the reflection API.

But wen you compiled your class with debug information, it is possible to extract the information from bytecode. Spring does it using the ASM bytecode engineering library.

See this answer for further information.

Diaphane answered 31/1, 2012 at 14:37 Comment(0)
W
3

http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/reflect/Method.html#toString()

use the toString() method of java.lang.reflect.Method object for the method you are looking for.

If you want to know how to get that method object just use this as a reference:

Method toString = Class.forName("java.lang.String").getDeclaredMethod("toString");
System.out.println(toString);

and it prints:

public java.lang.String java.lang.String.toString()

Wachter answered 31/1, 2012 at 14:32 Comment(0)
R
0
import java.lang.reflect.Method;

public class method1 {
    private int f1(Object p, int x) throws NullPointerException
    {
        if (p == null)
            throw new NullPointerException();
        return x;
    }

    public static void main(String args[])
    {
        try {
            Class cls = Class.forName("method1");

            Method methlist[] = cls.getDeclaredMethods();
            for (int i = 0; i < methlist.length; i++) {
                Method m = methlist[i];
                System.out.println("name = " + m.getName());
                System.out.println("decl class = " + m.getDeclaringClass());
                Class pvec[] = m.getParameterTypes();
                for (int j = 0; j < pvec.length; j++)
                    System.out.println("param #" + j + " " + pvec[j]);
                Class evec[] = m.getExceptionTypes();
                for (int j = 0; j < evec.length; j++)
                    System.out.println("exc #" + j + " " + evec[j]);
                System.out.println("return type = " + m.getReturnType());
                System.out.println("-----");
            }
        }
        catch (Throwable e) {
            System.err.println(e);
        }
    }
}
Redo answered 31/1, 2012 at 14:36 Comment(1)

© 2022 - 2024 — McMap. All rights reserved.