Java 8将引入一种更容易的方法来发现方法和构造函数的参数名称。
在Java 8之前,找到参数名称的方法是在编译阶段打开调试符号,这会在生成的类文件中添加有关参数名称的元信息,然后提取复杂的信息,需要处理字节码。获取参数名称。
对于Java 8,尽管仍需要使用打开调试符号的编译步骤才能将参数名称输入类字节码,但是此信息的提取更加简单,并且Java反射支持此信息。 考虑一个简单的类:
public class Bot {
private final String name;
private final String author;
private final int rating;
private final int score;
public Bot(String name, String author, int rating, int score) {
this.name = name;
this.author = author;
this.rating = rating;
this.score = score;
}
...
}
从理论上讲,遵循这些原则的代码应掌握上述构造函数的参数名称:
Class<Bot> clazz = Bot.class;
Constructor ctor = clazz.getConstructor(String.class, String.class, int.class, int.class);
Parameter[] ctorParameters =ctor.getParameters();
for (Parameter param: ctorParameters) {
System.out.println(param.isNamePresent() + ":" + param.getName());
}
参数是封装该信息的新反射类型。 在我用Java Developer Preview(b120)进行的测试中,我无法使它正常工作!
资源:
- http://openjdk.java.net/jeps/118
翻译自: https://www.javacodegeeks.com/2013/12/java-8-parameter-name-at-runtime.html