最近写反射相关的代码,想获取对应的参数名称,却发现没有特别好的方式。
创新互联建站专注于武义网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供武义营销型网站建设,武义网站制作、武义网页设计、武义网站官网定制、微信小程序服务,打造武义网络公司原创品牌,更为您提供武义网站排名全网营销落地服务。
jdk7 及其以前,是无法通过反射获取参数名称的。
jdk8 可以获取,但是要求指定 -parameter
启动参数,限制较多。
期间尝试过类似于 Mybatis 使用 @Param
的方式,但是感觉不够优雅,后来发现了下面的这个工具。
asm-tool 是基于 asm 构建的常见工具类。
下面简单介绍下使用方式。
jdk 1.7+
maven 3.x+
<dependency>
<groupId>com.github.houbb</groupId>
<artifactId>asm-tool</artifactId>
<version>0.0.2</version>
</dependency>
AsmMethodsTest 类下定义一个带有参数的方法
public String common(String name) {
return name;
}
通过 AsmMethods.getParamNamesByAsm(Method)
获取参数名称。
Method method = ClassUtil.getMethod(AsmMethodsTest.class,
"common", String.class);
List<String> param = AsmMethods.getParamNamesByAsm(method);
Assert.assertEquals("[name]", param.toString());
第一行获取我们定义的方法对应的 Method 信息;
第一行直接调用获取结果;
第三行进行断言验证。
使用过 mybatis 的开发对于 @Param
注解应该并不陌生。
其实这也是一种解决获取方法名称的方式,那就是基于 @Param
注解。
这个注解非常简单,直接可以定义在参数列表上,用于显示指定该字段的名称。
public String forParam(@Param("name") String name) {
return name;
}
通过 AsmMethods.getParamNamesByAnnotation(Method)
即可获取。
Method method = ClassUtil.getMethod(AsmMethodsTest.class,
"forParam", String.class);
List<String> param = AsmMethods.getParamNamesByAnnotation(method);
Assert.assertEquals("[name]", param.toString());
如果你没有指定注解,则会返回 arg0/arg1/... 这样的结果。
Method method = ClassUtil.getMethod(AsmMethodsTest.class,
"common", String.class);
List<String> param = AsmMethods.getParamNamesByAnnotation(method);
Assert.assertEquals("[arg0]", param.toString());
和获取方法非常类似。
也有基于注解和基于 asm 两种方式。
public ConstructorService(@Param("age") Integer age) {
}
Constructor constructor = ClassUtil.getConstructor(ConstructorService.class, Integer.class);
List<String> param = AsmMethods.getParamNamesByAnnotation(constructor);
Assert.assertEquals("[age]", param.toString());
public ConstructorService(String name) {
}
Constructor constructor = ClassUtil.getConstructor(ConstructorService.class, String.class);
List<String> param = AsmMethods.getParamNamesByAsm(constructor);
Assert.assertEquals("[name]", param.toString());
网页题目:java反射借助asm获取参数名称最优雅简单的方式
地址分享:https://www.cdcxhl.com/article32/pdhesc.html
成都网站建设公司_创新互联,为您提供网站维护、用户体验、电子商务、定制开发、建站公司、搜索引擎优化
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联