在 Java 6中 ,假设我具有以下方法签名:
public void makeSandwich(Bread slice1, Bread slice2, List<Filling> fillings, boolean mustard)
我想知道在运行时传递给slice2任何其他参数的值,这里重要的一点是我想通过参数名称获取该值。
slice2
我知道如何使用getParameterTypes或获取参数类型的列表getGenericParameterTypes。
getParameterTypes
getGenericParameterTypes
理想情况下,我想获取参数 名称 而不是类型的列表。有办法吗?
如果您告诉编译器将其包括在内,则可以使用参数名称(使用调试信息进行编译)。Spring ParameterNameDiscoverer可以帮助您获取名称。该默认实现使用ASM ClassReader这样做。
ParameterNameDiscoverer
ClassReader
与javac您一起应包含-g要包含调试信息的参数。我认为使用Eclipse是默认的。可以使用以下参数进行配置:Java->编译器,然后启用“存储有关方法参数的信息(可通过反射使用)”。
javac
-g
一些框架使用此。例如,spring-mvc具有@RequestParam可解析的默认名称。它还支持显式命名- @RequestParam("foo")如果不提供调试信息。
@RequestParam
@RequestParam("foo")