У меня есть класс
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
Моя проблема :Чем это отличается? В первом решении компилятор замечает, что он должен объединить две строки, а второе — это конфигурация. Так Configuration#toString()
называется и все нормально. В случае ошибки компилятора компилятор видит, что нужна строка, но дается конфигурация. В принципе та же проблема.
Чем отличаются эти случаи и почему toString
не называется?