如何在 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__
不同,获取堆栈跟踪会导致性能下降。乖一点:)
在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__
不同,获取堆栈跟踪会导致性能下降。乖一点:)