ToStringBuilder не печатает содержание вложенных объектов

Я - cuurently использование апачского свободного городского населения API (commmons-lang.jar) для печати объекта значения как показано ниже:

ToStringBuilder.reflectionToString(object,ToStringStyle.MULTI_LINE_STYLE))

Но этот код не печатает значение, если объект имеет метод получателя, который возвращает другой объект.

Например, я имею Person объект это имеет метод получателя, который возвращается Address объект. Используя вышеупомянутый код, это просто печатает Address имя объекта. Я ищу печать Address возразите значениям также. Если я передача person.getAddress() к вышеупомянутому коду это печатает это, но я хочу видеть все, когда я передаю объект человека.

Какие-либо предложения?

9
задан Duncan Jones 19 March 2015 в 12:15
поделиться

2 ответа

Вы также можете определить базовый класс для всех ваших классов, который будет определять метод toString следующим образом :

public abstract class MyBaseClass{
  public String toString(){
    return ToStringBuilder.reflectionToString(object,ToStringStyle.MULTI_LINE_STYLE));
  }
}

А затем просто сделайте свои классы, чтобы расширить его. При таком подходе весь ваш доменный объект сможет генерировать приятный toString().

3
ответ дан 4 December 2019 в 12:17
поделиться

Потому что он не генерировать toString рекурсивно. Либо поищите другой инструмент, либо просто реализуйте (или, лучше, автоматически сгенерируйте IDE) Object # toString () для всех их самостоятельно.

Например:

public class Person {
    private String name;
    private Address address;
    // Add/generate ctors, getters and setters.

    public String toString() {
        return String.format("Person[name: %s, %s]", name, address);
    }
}

и

public class Address {
    private String street;
    private String city;
    // Add/generate ctors, getters and setters.

    public String toString() {
        return String.format("Address[street: %s, city: %s]", street, city);
    }
}

таким образом

String personString = person.toString();

и

System.out.println(person);

будут производить что-то вроде

Person[name: goutham, Address[street: Main Street 1, city: New York]]
8
ответ дан 4 December 2019 в 12:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: