Добавить к ответам Стива и Дона (+1 для них):
Сделайте ваш метод toString()
простым, убедитесь, что он никогда не вызывает ожидания (особенно помните о полях, которые могут быть нулевыми)
Если возможно, не вызывайте другие методы вашего класса. По крайней мере, убедитесь, что ваш метод toString()
не изменяет ваш объект.
И помните о глупых циклах исключений-toString:
public class MyClass {
...
public String toString() {
// BAD PRACTICE 1: this can throw NPE - just use field1
return " field1=" + field1.toString()
+ " extraData=" + getExtraData();
// BAD PRACTICE 2: potential exception-toString loop
}
public MyExtraData getExtraData() {
try {
.... do something
} catch(Exception e) {
throw new RuntimeException("error getting extradata - " + this.toString(),e);
}
}
}