In Java 6, imagine I have the following method signature:
public void makeSandwich(Bread slice1, Bread slice2, List<Filling> fillings, boolean mustard)
I would like to know, at runtime, the value that was passed on to slice2 or any other parameter, the important bit here is that I want to get the value by parameter name.
I know how to get the list of parameter types with getParameterTypes or getGenericParameterTypes.
Ideally I would like to get a list of parameter names instead of types. Is there a way to do so?
Parameter names are available if you have told the compiler to include them (compile with debug information). Spring has
ParameterNameDiscovererwhich can help you obtain the names. The default implementation uses asmClassReaderto do so.With
javacyou should include the-gargument to include debug information. With Eclipse I think it is there by default; it can be configured using the preferences: Java -> Compiler and then enable “Store information about method parameters (usable via reflection)” (see also this answer).Some frameworks use this. For example spring-mvc has
@RequestParamwhich defaults to the param name, if resolvable. It also supports explicit naming –@RequestParam("foo")in case no debug information is provided.