0

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

有什么方法可以通过仅使用类对象来动态打印变量名称及其值?

例如:

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

Person:: age:10, name: abc

类似的东西..

编辑:

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

4

4 回答 4

1

您将需要使用托管语言中常见的东西,称为反射。反射使您可以在运行时了解程序的内部结构。

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

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

这允许您添加新字段而无需更新toString()函数。

于 2013-08-19T05:58:50.153 回答
0

如果你重写方法并在语句中toString使用 Person 类,它会在内部被调用。所以重写 toString 方法来打印你提到的对象。sysouttoString

于 2013-08-19T05:51:10.720 回答
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
于 2013-08-19T05:51:20.643 回答
0

覆盖PersontoString方法。

public String toString(){
   return "Person:: age:"+age+", name: "+name;
}
于 2013-08-19T05:51:43.430 回答