如何动态记录类变量及其值?
有没有办法只使用类对象动态打印变量名及其值?
例如:
我们传递Person
类对象,输出为:
Person:: age:10, name: abc
类似的东西..
修改
有很多课程。除了覆盖toString()
方法之外的任何其他解决方案?这一切都是动态的吗?就像传递类对象一样?
答案 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)
覆盖Person
类toString
方法。
public String toString(){
return "Person:: age:"+age+", name: "+name;
}