在Java中使用语义变量名

问题描述 投票:5回答:1

我目前正在尝试从外部系统设置一些参数。我有一个带有命名参数的请求,为了正确设置变量,我在服务调用上使用了带注释的方法参数。一个简化的例子可能是

public Response loginAttempt(@MyParam("username") String username, @MyParam("password") String password) {
    // login logic here
}

显然,注释每个参数名称是令人烦恼和重复的(尽管,它确实具有允许我在不同版本的API上更改名称的次要优势,这不是重点。)

如果我能够在我的反思部分中简单地引用参数的名称,那将是非常非常方便的。现在,我获取参数及其注释,记下它们的顺序,创建该命令的数组,然后运行它。

我知道在以前的Java版本中,这根本无法完成。我也知道Java比以前更快地发布版本,具有比以往更新,更现代的功能。不幸的是,15年前信息的信噪比太高,不足以得到确定的答案。这是可以用现代Java完成的吗?

java named-parameters
1个回答
5
投票

从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
}
© www.soinside.com 2019 - 2024. All rights reserved.