如何在 Java 中进行字符串化

How to stringify in Java

在c++中我们可以使用宏作为

#define check_and_log_warning(x) if (!(x)) {log_error(#x); cout<<__LINE__;}

我想获取布尔表达式的值并将其用作字符串。 在宏中获取行号会增加好处。

可以在Java中写出类似这个宏的东西吗? 我最近从 c/c++ 移动到 java,所以我想知道在没有宏的情况下可以在 c++ 中完成这样的事情吗?

Java中没有宏工具。

您将使用日志记录框架(其中有很多可供选择)。

if (! theActualConditionNotJustX) myLogger.error("describe problem here");

日志记录后端(如果以这种方式配置)确保捕获和显示行号。这会产生一些运行时成本,但通常可以忽略不计,尤其是在涉及实际 "errors" 的情况下(跟踪级日志记录可能会有点昂贵)。

预处理器是我在 Java 中错过 C/C++ 的地方。有很多方法...,但它们是 Java 种方法。

1/断言: http://docs.oracle.com/javase/7/docs/technotes/guides/language/assert.html

2/ 日志: 我用的是https://commons.apache.org/proper/commons-logging/

(通过 log4J 或任何你想要的)

要在日志消息中打印行号,您可以使用类似: int lineNo = Thread.currentThread().getStackTrace()[2].getLineNumber();

编辑: 警告:与 C++ 中的 __LINE__ 不同,获取堆栈跟踪会导致性能下降。乖一点:)