动态记录java类变量及其值

时间:2013-08-19 05:48:18

标签: java logging

如何动态记录类变量及其值?

有没有办法只使用类对象动态打印变量名及其值?

例如:

我们传递Person类对象,输出为:

Person:: age:10, name: abc

类似的东西..

修改

有很多课程。除了覆盖toString()方法之外的任何其他解决方案?这一切都是动态的吗?就像传递类对象一样?

4 个答案:

答案 0 :(得分:1)

您需要使用名为reflection的托管语言中常见的内容。 Reflection允许您在运行时了解程序的内部结构。

在Java中,您需要在类(或任何其他类)上使用getFields()函数。

@Override
public String toString() {
    for(Field field : this.getClass().getFields()) {
        System.out.println(field.getName() + ":" + field.get(this) + ",");
    }
}

这使您可以添加新字段,而无需更新toString()函数。

答案 1 :(得分:0)

如果覆盖toString方法并在sysout语句中使用Person类,则会在内部调用其toString。因此,如上所述,重写toString方法以打印对象。

答案 2 :(得分:0)

我相信您要覆盖Object.toString

然后,您可以在返回的String中添加所需的任何描述性字段或类名称引用。

然后,如果你想动态地将你的类记录到你使用的任何记录器(或简称为System.out),你可以添加一个实例语句(可能在执行构造函数之后)并记录String表示你的班级在那里。

例如:

public class Foo {

    private int blah;
    public Foo() {
        blah = 1;
        System.out.println(this);
    }
    @Override
    public String toString() {
        return getClass().getName().concat(": ").concat(String.valueOf(blah));
    }
}

public class Main {
    public static void main(String[] args) {
        new Foo();
    }
}

输出:

test.Foo: 1

答案 3 :(得分:0)

覆盖PersontoString方法。

public String toString(){
   return "Person:: age:"+age+", name: "+name;
}