我目前正在尝试从外部系统设置一些参数。我有一个带有命名参数的请求,为了正确设置变量,我在服务调用中使用了带注释的方法参数。一个简化的例子可能是
public Response loginAttempt(@MyParam("username") String username, @MyParam("password") String password) {
// login logic here
}
显然,注释每个参数名称很烦人且重复(尽管它确实有一个小优点,允许我在不同版本的 API 上更改名称,这不是重点。)
如果我能够在反射(reflection)部分简单地引用参数的名称,那将非常非常方便。现在,我在哪里获取参数及其注释,记下它们的顺序,按该顺序制作一个数组,然后使用它运行。
我知道在以前的 Java 版本中这根本无法完成。我还知道 Java 发布版本的速度比以往任何时候都快,具有比以往任何时候都更新、更现代的功能。不幸的是,15 年前信息的信噪比太低,不足以得到明确的答案。这可以用现代 Java 完成吗?
最佳答案
从 Java 8 开始,如果您使用 javac -parameters
选项编译代码,方法参数将被保留,但是 there are drawbacks .问题主要是类文件大小,请查看 Obtaining Names of Method Parameters文档。
您可以使用 java.lang.reflect.Parameter.getName()
获取方法参数名称:
Method m = getClass().getMethods()[0];
System.out.println(m.getName()); // loginAttempt
Parameter[] parameters = m.getParameters();
for (Parameter parameter : parameters) {
System.out.print(parameter.getName() + " "); // username password
}
关于java - 在 Java 中语义地使用变量名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55244792/