方法可以访问调用者的局部变量吗?

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

当报告的数量为one时,我希望输出使用单数名词。目前我一直在做这样的事情:

logger.debug("Got {} row{}", rows, rows == 1 ? "" : 's');

但这会变得乏味。

所以,我正在考虑一种方法,根据值返回整个字符串

"1 row"
"5 rows"
static String printable(int value, String name)
做起来很简单,但使用起来很乏味,它会被调用为
printable(rows, "row")
,这对于任何阅读代码的人来说都是多余的。

也许 Java 可以只用一个参数?其中之一:

  1. printable(rows)
    - 调用的方法查找传递给它的变量的 name 以构造名词(单数或复数取决于值)。
  2. printable("rows")
    ——调用的方法在调用者的作用域中查找变量的value(按指定名称)?

类似的事情可以在编译时使用 C 预处理器完成,例如:

#define PRINTABLE(val) printable(val, #val)

Java 可以做到(在运行时)吗?

如果所有这些都可以被跳过,如果当前日志级别还不够详细,无法实际输出日志条目,那就太好了。

java lambda reflection
1个回答
0
投票

“Java 可以做到(在运行时)吗?”

您可以尝试设置预处理器,但这看起来有些过头了。

也许是这个?

logger.debug("Got {}", formatRows(rows));
© www.soinside.com 2019 - 2024. All rights reserved.