クラスがあります
class Configuration {
// various stuff
@Override
public String toString() {
// assemble outString
return outString;
}
}
他にもクラスがあります
class Log {
public static void d(String format, Object... d) {
// print the format using d
}
}
Log クラスは問題なく動作します。私はいつもそれを使用しています。今私がこれを行うとき:
Configuration config = getConfiguration();
Log.d(config);
コンパイラ エラーが発生しますThe method d(String, Object...) in the type Log is not applicable for the arguments (Configuration)
。私はこれを解決できます:
Log.d("" + config); // solution 1
Log.d(config.toString()); // solution 2
私の問題:これはどう違うのですか?最初の解決策では、コンパイラは 2 つの文字列を連結する必要があることに気付きますが、2 つ目の解決策は構成です。そうConfiguration#toString()
呼ばれ、すべてが順調です。コンパイラ エラーの場合、コンパイラは文字列が必要であることを認識しますが、構成が指定されています。基本的に同じ問題です。
- 必要: 文字列
- 与えられた: 構成
これらのケースはどのように異なり、なぜtoString
呼び出されないのですか?