java - 在 Java 中语义地使用变量名

标签 java named-parameters

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

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/

相关文章:

java - Spring java config - 创建也在运行时创建的 beans 列表

command-line-interface - 如何从命令行提供非 slurpy 数组或命名数组?

java - 使用 java 代码从 GIT url 检索分支

java - 对 Windows/Linux/Mac 上的 Java 程序中的全局热键使用react?

sql - groovy - 带 map 的 Sql everyRow 命名参数

c# - 为什么包含命名参数会导致 "type arguments for method cannot be inferred from usage"错误?

powershell - 带有命名参数的调用命令启动进程

sql-server - 当命令类型为 adCmdText 时是否可以使用命名参数?

java - 如何生成由 websphere 9 上运行的应用程序分隔的日志文件?我使用 java.util.logging 来生成日志

java - connection.setRequestProperty 和明确写入 urloutputstream 是一样的吗?