我有一堂课
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
不调用?