クラス変数とその値を動的にログに記録するにはどうすればよいですか?
クラスオブジェクトのみを使用して、変数名とその値を動的に出力する方法はありますか?
たとえば、次のようにします。
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;
}