5

在以前的工作中,我在 C++ 中工作,公司内部库有一个日志记录宏,我可以在其中简单地编写 LOG( somevariable ),它会输出到标准输出:

变量名变量值

有谁知道在Java中是否有办法做到这一点?

我从没想过看他们的代码,所以我不知道它是如何完成的。不过真的很有用!

4

4 回答 4

2

如果您使用 Eclipse,您可以使用“Watch Expression”-View 不仅可以查看变量,还可以查看方法调用。看到这个

如果您只想打印变量的值,可以使用 Eclipse 模板。转到Windows->Preferences并查找条目Java->Editor->Templates。添加一个新模板并将其命名为例如“printvar”。将以下内容添加到模板正文中:

System.out.println("${variable} = "+ ${variable});

在编码期间键入printvar然后按下CTRL+Space将生成输入的代码,并将${variable}其用作变量名称的占位符。您只需要输入一次变量名,这样可以节省时间和输入。

顺便说一句:您可以在 C++ 中创建允许像 LOG(variable_name) 这样的语法糖的宏的原因是因为 C++ 有一个预处理器:Java 没有。Java 预处理器有一些实现,但我认为对于像打印变量名后跟其值这样简单的问题,使用一个会花费太多精力。

于 2013-01-07T16:17:25.360 回答
2

如果您soutv + TAB在 Intellij 和 Netbeans 上键入,它会为您提供您可能想要打印的变量列表。

在此处输入图像描述

我复制了这个并将其更改为使用记录器而不是logv + TAB

在此处输入图像描述

于 2013-01-07T16:21:18.990 回答
0

典型的技术是使用 log4j,或 logback,或其他东西。也许是由 slf4j 介导的。这通常需要每个类有一个静态变量,这反过来会导致日志消息告诉您它们来自哪里。

于 2013-01-07T16:25:52.617 回答
0

您在 java 中没有 MACRO,但是您可以在某个类上使用静态方法执行类似的操作。没有变量名,但确实具有类类型。

class DebugUtil
{
  public void static LOG(Object obj)
  {
    LOG(System.out, obj.getClass().getName(), obj);
  }

  public void static LOG(String name, Object obj)
  {
    LOG(System.out, name, obj);
  }

  public void static LOG(PrintStream ps, String name, Object obj)
  {
    ps.println(name + ":" + obj);
  }
}

然后用于使用

String foo = "bar";
Debug.Util.LOG(foo);
Debug.Util.LOG("foo", foo);
于 2013-01-07T16:38:25.127 回答