Java如何获取方法参数中的名称
来源:互联网 发布:淘宝嘉年华到什么时候 编辑:程序博客网 时间:2024/06/05 22:35
在有些场景下,我们有可能想在程序中获取一个方法参数的名称。
但是,对于Java这样的“编译”型语言来说,并没有直接的API可以调用。
其实很容易理解,当Java源代码被编译成字节码后,方法的签名可能不会被保存下来,也就无从获取方法的参数名称了。
虽然官方没有提供直接的解决方案,但是民间偏方还是有的。 思路就是:字节码解析,通过解析class文件,获取方法签名中的参数名称。
既然还是解析字节码,那么能否成功依然受到Java编译指令的影响。
也就是说,只有在编译的时候开启了debug信息,这样编译好的字节码中才会完整保留方法的参数名。
目前,比较流行的字节码处理框架是ASM,但是 com.thoughtworks.paranamer 这个基于ASM的框架,提供了一个方便的解决方案。
我们看看它是怎么实现获取参数名称的。
import java.lang.reflect.Method;import com.thoughtworks.paranamer.BytecodeReadingParanamer;import com.thoughtworks.paranamer.Paranamer;public class DetectParameterNames {public String[] detectParameterNames(String name1, String name2)throws Exception {Method method = getClass().getDeclaredMethod("detectParameterNames",String.class, String.class);if (method != null) {Paranamer paranamer = new BytecodeReadingParanamer();String[] parameterNames = paranamer.lookupParameterNames(method);return parameterNames;}return null;}public static void main(String[] args) throws Exception {String[] parameterNames = new DetectParameterNames().detectParameterNames(null, null);for (String parameterName : parameterNames) {System.out.println(parameterName);}}}
在命令行编译的时候,需要-g以保留debug信息
如果是eclipse,需要在编译的时候勾选这三行,具体作用写的非常明确。
总结:虽然说这个“民间偏方”确实能够解决问题,不过依赖编译时选择“生成所有调试信息”。这样脆弱的强依赖,非常容易出现问题。所以,此方式看起来并不是一个非常好的选择,尤其对于商业使用。
0 0
- Java如何获取方法参数中的名称
- Java如何获取方法参数的参数名称?
- java反射获取方法参数名称
- Spring 中 java 获取方法参数名称
- java获取方法的参数名称
- 如何获取当前线程中的方法名称
- java 通过反射获取方法参数列表名称
- Java获取函数参数名称的几种方法
- java如何获取方法参数名
- Spring LocalVariableTableParameterNameDiscoverer 获取方法的参数名称
- java8获取方法的参数名称
- 使用Java8获取方法参数名称
- JDK 8 获取编译后Class中方法参数中的名称
- Java 8中获取参数名称
- 在Java 8中获取参数名称
- java获取字符串中的图片名称
- J2SE_通过反射能获取方法参数名称吗?
- JoinPoint获取参数的方法和名称(1)
- Eclipse编译JNI时提示"Fatal: Unable to open makefile"解决办法
- 我是菜鸟我怕谁……
- poj 3370 Halloween treats
- NoSQL(MongoDB,Redis,Tokyo Cabinet, Berkeley DB)解决方案比较
- 归并排序
- Java如何获取方法参数中的名称
- hoj 1201 Ananagrams
- 分布式队列
- android recovery模式
- iOS开发- 以图搜图功能实现 (源码+解析)
- linux 内核模块函数调用
- SQL SERVER触发器应用案例讲解(deleted表或者inserted表)
- Ubuntu NetworkManager 使用要項
- 个人开发者App分发应用市场时需要注意的几点