2012-07-26 10 views
10

Mam klasy Java bean Person zawierający 3 zmienne:Jak drukować Java Bean całkowicie przy użyciu odbicia lub innego narzędzia

  • nazwa (string)
  • wiek (String)
  • adresowych (Object) .

Address zawiera 3 zmienne:

  • ulicznych
  • door_no
  • miasto

Chciałbym mieć narzędzie, które należy wydrukować wszystkie zmienne w Person.

Mam na myśli to, że powinien wydrukować Person & również w nim zawarty obiekt Address.

Mogłem utworzyć hashmap i umieścić wartości zmiennych & wartości za pomocą refleksji i drukowania klucz/wartość UI w JSP, ale problem jest muszę zastosować odbicie dla Address, aby dodać zmiennej/wartości w hashmap.

Czy jest dostępne narzędzie do tego?

+4

Czy to nie to, co powinno robić '#toString()' na tych obiektach? – Romain

Odpowiedz

27

Można użyć ToStringBuilder z Apache Commons.

Z dokumentacji:

Typowe wywołanie tej metody wyglądałby następująco:

public String toString() { 
    return ToStringBuilder.reflectionToString(this); 
} 

Więcej szczegółów:

Klasa ta pozwala na dobre i spójne toString () do zbudowania dla dowolnej klasy lub obiektu. Ta klasa ma na celu uproszczenie procesu poprzez:

pozwalając nazwy pól obsługi wszystkich rodzajów konsekwentnie przeładunkowe null konsekwentnie wyprowadzania tablic i tablic wielowymiarowych umożliwiające poziom szczegółowości być kontrolowane dla obiektów i zbiorów obchodzenia klasy hierarchie Do tego zastosowania Klasa napisać kod w następujący sposób:

public class Person { 
    String name; 
    int age; 
    boolean smoker; 

    ... 

    public String toString() { 
    return new ToStringBuilder(this). 
     append("name", name). 
     append("age", age). 
     append("smoker", smoker). 
     toString(); 
    } 
} 

Alternatywnie istnieje metoda, która używa odbicie w celu określenia pola przetestować. Ponieważ te pola są zwykle prywatne, metoda, reflectionToString, używa AccessibleObject.setAccessible, aby zmienić widoczność pól na . Spowoduje to niepowodzenie w przypadku menedżera zabezpieczeń, , chyba że odpowiednie uprawnienia zostały poprawnie skonfigurowane. Jest także wolniejszy niż testowanie jawnie. Typowe wywołanie tej metody wyglądałby następująco:

public String toString() { 
    return ToStringBuilder.reflectionToString(this); 
} 
+0

Możesz użyć ToStringBuilder poza swoją metodą toString. ToStringBuilder.reflectionToString (otherObject) –

+1

możesz użyć w ten sposób: 'ToStringBuilder.reflectionToString (objectRetrieved)' dokładnie tak jak Jeff wyjaśnił –

+0

@FranciscoSpaeth Co jeśli masz zmienną listy? Lista hobby; Jak ustawić to toString? – Jesse

1

można zaimplementować metodę toString wydrukować co chcesz, albo użyć Apache Commons ToStringBuilderhttp://commons.apache.org/lang/api-2.3/org/apache/commons/lang/builder/ToStringBuilder.html i jego metody reflectionToString. Nie wierzę, że to się powtórzy za pośrednictwem właściwości (na przykład adresu), ale jeśli chcesz zobaczyć adres wydrukowany za pomocą ulicy, drzwi i miasta, użyj implementacji jej metody toString, aby wydrukować te informacje.

1

Może okazać się przydatny do tego celu serisel Jackson JSON. Biblioteka Jacksona może już być częścią twojego stosu. Jeśli nie, znajdź wymagane zależności poniżej.

private static final ObjectMapper OBJECT_MAPPER_SINGLETON = new ObjectMapper(); 
public static String toStringUsingJackson(final Object object) { 
    try { 
     return OBJECT_MAPPER_SINGLETON.writeValueAsString(object); 
    } catch (final JsonProcessingException e) { 
     return String.valueOf(object); 
    } 
} 

Przykładowe wyjście:

{ "name": "Jan Kowalski", "wiek": 42}

Wymagane Maven/Gradle Zależności:

  • jackson-core, groupId = com.fasterxml.jackson.core
  • jackson-databind, groupId = com.fasterxml.jackson.core
Powiązane problemy