直接阅读JVM的字节编码,绝对是瞌睡的节奏,但是在码过程中理解一下,倒是会记忆深刻
反射时,为什么获取不到方法的参数名?
1. 在JVM规范中,方法参数名不参与方法签名;这也就是为什么仅仅参数名不同,方法是不能重载的
2. 方法参数名虽然不参与方法签名,但编译时,该信息还是会默认保存到字节码文件中,因此通过解析节码文件还是能取到的,比如:通过javassit或者spring的LocalVariableTableParameterNameDiscoverer类获取,在低版本的jdk中,通过反射是获取不到的。
3. jdk1.8版本后,反射也能获取到方法参数名,但需要在jvm启动时,使用-parameters参数开启该功能
4. 由于参数名不参与方法签名,所以该信息在运行时属于冗余的信息。因此在对保密性代码进行混淆时,方法参数名一般会被替换成毫无意义的字符,如果编码中对它有依赖是会有风险的。
为什么范型获取不到具体的类型?
待续......