在之前的工作中,我使用的是C ++,公司内部库有一个日志记录宏,我只需编写LOG( somevariable ),它就会输出到标准输出:
“ variablename : variablevalue ”
有没有人知道在Java中是否有办法做到这一点?
我从未想过要查看他们的代码,所以我不知道它是如何完成的。这真的很有用!
答案 0 :(得分:2)
如果在Intellij和Netbeans上键入 soutv + TAB ,它将为您提供可能要打印的变量列表。
我复制了这个并将其更改为使用记录器而不是 logv + TAB
答案 1 :(得分:1)
如果您使用Eclipse,您可以使用“Watch Expression”-View不仅可以监视变量,还可以监视Method调用。请参阅this。
如果您只想打印变量的值,可以使用Eclipse模板。
转到Windows->Preferences
并查找条目Java->Editor->Templates
。添加一个新模板并将其命名为“printvar”。将以下内容添加到模板主体:
System.out.println("${variable} = "+ ${variable});
在编码期间键入printvar
,然后按 CTRL + Space 将使用${variable}
生成输入的代码作为变量名称的占位符。您只需输入一次变量名称,这样可以节省时间和输入。
BTW:你可以在C ++中创建允许像LOG(variable_name)这样的语法糖的宏,因为C ++有一个预处理器:Java没有。有一些Java预处理器的实现,但我认为使用一个这样的简单问题需要付出太多努力,例如打印变量的名称后跟其值。
答案 2 :(得分:0)
典型的技术是使用log4j或logback等。也许是由slf4j调解的。这通常需要每个类的静态变量,这反过来会使日志消息告诉您它们的来源。
答案 3 :(得分: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);