Java8中引入了非常多的特性,对于我这个从C#转Java的开发人员而言,Lambda是我的最爱,让我觉得Java总算弥补了一块很大的短板(C#当时用Lambda真的很舒服)。
当然今天想聊聊的不是Labmda,这块内容另外抽时间聊,今天说说一个小特性:反射获取方法真正名称。
曾经有个项目希望实现一个这样的技术需求:从方法中获取形参的真实名称,然后转成某个xml
的一个属性。
当时本以为很简单,可以直接通过API获取,但是通过反射获取的形参的名称总是:arg0
这样的参数。
项目在当时使用的JDK7,所以强行给每个形参加上注解
指明方法的形参,类似:
public void execute(@param("taskId") String taskId) {
System.out.println(taskId);
}
相信大家也看到了,这个做法确实不够优雅,但是在当时应该是唯一的解决办法了。
后来有段时间刷博客,刷到了介绍Java8的一篇文章对此有记录,当时就记下来了,前段时间有空,就实践了下,今天简单记录分享下。
假设有如下方法:
class Executor {
public void execute(String taskId) {
System.out.println(taskId);
}
}
我需要从execute
方法中获取参数taskId
这个形参的名称:taskId
在Java8中需要进行环境变量配置才可以通过如下代码获取:
public static void main(String[] args) throws NoSuchMethodException {
Class<Executor> executorClass = Executor.class;
Method method = executorClass.getMethod("execute", String.class);
for (Parameter parameter : method.getParameters()) {
String name = parameter.getName();
System.out.println(name);
}
}
选择 Compiler
然后选择如下参数即可: