如何动态记录类变量及其值?
有什么方法可以通过仅使用类对象来动态打印变量名称及其值?
例如:
我们传递Person
类对象,输出是:
Person:: age:10, name: abc
类似的东西..
编辑:
有很多类。toString()
除了覆盖方法之外还有其他解决方案吗?这一切都可以是动态的吗?就像只是传递类对象?
您将需要使用托管语言中常见的东西,称为反射。反射使您可以在运行时了解程序的内部结构。
在 Java 中,您需要在您的类(或任何其他类)上使用getFields()函数。
@Override
public String toString() {
for(Field field : this.getClass().getFields()) {
System.out.println(field.getName() + ":" + field.get(this) + ",");
}
}
这允许您添加新字段而无需更新toString()
函数。
如果你重写方法并在语句中toString
使用 Person 类,它会在内部被调用。所以重写 toString 方法来打印你提到的对象。sysout
toString
我相信你想覆盖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
覆盖Person
类toString
方法。
public String toString(){
return "Person:: age:"+age+", name: "+name;
}