java - java打印变量名和变量值的方法

标签 java

String activityState = "resume";
DebugLog(activityState)

void DebugLog(String obj1) {}

如何使 DebugLog 像这样打印:

activityState : resume

我曾经在调试的时候在很多地方写了很多打印语句作为日志。我会写这样的语句

System.out.println("activityState : " + activityState);

我想要一个打印变量名和变量值的方法。在 C++ 中,它可以像下面这样完成:

#define dbg(x) cout<< #x <<" --> " << x << endl ;

有什么办法吗?

提前致谢。

最佳答案

没有直接的解决方案来获取变量名。

但是,在您有很多字段并且不想手动打印它们的状态的上下文中,您可以使用反射。

这是一个简单的例子:

class MyPojo {
    public static void main(String[] args) {
        System.out.println(new MyPojo());
    }

    int i = 1;
    String s = "foo";

    @Override
    public String toString() {
        StringBuilder result = new StringBuilder();
        for (Field f: getClass().getDeclaredFields()) {
            try {
            result
            .append(f.getName())
            .append(" : ")
            .append(f.get(this))
            .append(System.getProperty("line.separator"));
            }
            catch (IllegalStateException ise) {
                result
                .append(f.getName())
                .append(" : ")
                .append("[cannot retrieve value]")
                .append(System.getProperty("line.separator"));
            }
            // nope
            catch (IllegalAccessException iae) {}
        }
        return result.toString();
    }
}

输出

i : 1
s : foo

关于java - java打印变量名和变量值的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25077000/

相关文章:

java - AWS SWF 在特定条件下重新启动工作流程

java - swing:在 BoxLayout 中对齐 JPanel

JAVA客户端-服务器软件,多台机器

java - 解析制表符分隔文件的策略

java.net.SocketException : Software caused connection abort: recv failed

java - Netbeans 7.2.1,Java 反射,method.invoke(super, ..)

java - AWS S3获取包含文本的 key

Java:如何计算编号。文件中的行数?

java - 注销Struts 2.0应用程序后的chrome后退按钮

java - libgdx:加载游戏中所有 Assets 的最佳方式