如何在Java中保存编译后接口的参数名?
我想在Java中编译后保留接口方法的参数名 下面是一个例子 编制前:如何在Java中保存编译后接口的参数名?,java,interface,javac,Java,Interface,Javac,我想在Java中编译后保留接口方法的参数名 下面是一个例子 编制前: interface IFoo { void hello(String what); } 使用javac-g:vars IFoo.java编译后 interface IFoo { void hello(String str); } 参数what重命名为str 如何保留参数名称?参数或局部变量没有名称,只有一个数字 我相信添加局部变量名的命令行参数是-parameters,以启用通过反射的访问 反编译器的工作是
interface IFoo {
void hello(String what);
}
使用javac-g:vars IFoo.java编译后
interface IFoo {
void hello(String str);
}
参数what
重命名为str
如何保留参数名称?参数或局部变量没有名称,只有一个数字
我相信添加局部变量名的命令行参数是-parameters
,以启用通过反射的访问
反编译器的工作是确定/猜测变量名。我用的是蕨类植物,它做的工作很合理
输入
import java.util.stream.stream;
接口IFoo{
公共摘要void hello(字符串what);
公共静态无效打印(字符串…参数){
Stream-Stream=Stream.of(args);
stream.forEach(System.out::println);
}
}
使用Fernflower的输出
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
import java.io.PrintStream;
import java.util.function.Consumer;
import java.util.stream.Stream;
interface IFoo {
void hello(String what);
static void print(String... args) {
Stream<String> stream = Stream.of(args);
PrintStream var10001 = System.out;
System.out.getClass();
stream.forEach(var10001::println);
}
}
//
//IntelliJ IDEA从.class文件重新创建的源代码
//(由Fernflower反编译器提供动力)
//
导入java.io.PrintStream;
导入java.util.function.Consumer;
导入java.util.stream.stream;
接口IFoo{
无效hello(字符串what);
静态无效打印(字符串…参数){
Stream-Stream=Stream.of(args);
PrintStream var10001=系统输出;
System.out.getClass();
forEach(var10001::println);
}
}
注意:System.out.getClass()代码>由javac
编译器生成,用于测试null
值。编译时需要生成调试信息。
这就是选项-g
的作用:
-g
-生成所有调试信息,包括局部变量
如果您使用的是Maven,则可以在中设置true
虽然它对类方法和静态接口方法都很有吸引力,但对非静态接口方法却不起作用。
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
import java.io.PrintStream;
import java.util.function.Consumer;
import java.util.stream.Stream;
interface IFoo {
void hello(String what);
static void print(String... args) {
Stream<String> stream = Stream.of(args);
PrintStream var10001 = System.out;
System.out.getClass();
stream.forEach(var10001::println);
}
}