- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于同一个 Junbin.java 文件,javac、javac -parameters 和 gradle build 编译的输出是不同的。我想用三种情况来说明让我困惑的问题。
原始文件Junbin.java
public class Junbin {
public Junbin() {
}
public static void main(String[] ko) throws UnknownHostException, SocketException, ClassNotFoundException {
System.out.println("-----");
}
public static void t(List<? super Integer> lis) {
lis.add(Integer.valueOf(1));
}
}
1、javac Junbin.Java -参数第一种情况,main方法的参数“ko”可以通过Java8中添加的Method.getParameters()获取。
2、javac Junbin.java如果我不在 javac 上添加 -parameter 选项,Method.getParameters()[0].getName() 会打印 arg0,而不是“ko”。
对于上述两种情况,在Intellij idea中查看编译后的类文件如下所示。
public class Junbin {
public Junbin() {
}
public static void main(String[] var0) throws UnknownHostException, SocketException, ClassNotFoundException {
System.out.println("-----");
}
public static void t(List<? super Integer> var0) {
var0.add(Integer.valueOf(1));
}
}
参数名称均为arg0。
3、gradle构建Method.getParameters 无法获取“ko”。但是,Intellij idea中打开的gradle编译的输出类是正确的。如下图
public class Junbin {
public Junbin() {
}
public static void main(String[] ko) throws UnknownHostException, SocketException, ClassNotFoundException {
System.out.println("-----");
}
public static void t(List<? super Integer> lis) {
lis.add(Integer.valueOf(1));
}
}
我绝对可以通过 Spring 的 LocalVariableTableParameterNameDiscoverer 获取参数名称“ko”。
如果参数名称在编译时被删除,Spring LocalVariableTableParameterNameDiscoverer 如何通过读取类文件来获取参数名称?
最佳答案
它使用调试信息映射,如以下源代码快照中所述:
Map<Member, String[]> map = this.parameterNamesCache.get(declaringClass);
if (map == null) {
map = inspectClass(declaringClass);
this.parameterNamesCache.put(declaringClass, map);
}
if (map != NO_DEBUG_INFO_MAP) {
return map.get(originalMethod);
}
因此,当您编译源文件时,调试符号将被保存。如果您在没有它们的情况下编译文件,它也不会显示任何方法名称。所以,显然,Intellij Idea 根本不使用调试符号,这就是所有的解释:)
关于java - 如果参数名称在编译时被删除,Spring LocalVariableTableParameterNameDiscoverer 如何通过读取类文件来获取名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44717276/
我想获取包外接口(interface)方法的参数名称。 看起来LocalVariableTableParameterNameDiscoverer只能获取本地类的方法的参数名称。它不会获取包外接口(in
对于同一个 Junbin.java 文件,javac、javac -parameters 和 gradle build 编译的输出是不同的。我想用三种情况来说明让我困惑的问题。 原始文件Junbin.
我是一名优秀的程序员,十分优秀!