toString :Когда используется?

У меня есть класс

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не называется?

6
задан brimborium 2 August 2012 в 14:02
поделиться