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

メソッドをオーバーライドしてステートメントでtoStringPerson クラスを使用すると、内部で呼び出されます。したがって、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

PersonクラスtoStringメソッドをオーバーライドします。

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