You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Thomas Neidhart (JIRA)" <ji...@apache.org> on 2013/04/20 17:19:16 UTC
[jira] [Resolved] (LANG-754) embedded objects are not toString-ed
like top-level objects
[ https://issues.apache.org/jira/browse/LANG-754?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Thomas Neidhart resolved LANG-754.
----------------------------------
Resolution: Fixed
Applied patch in r1470174.
> embedded objects are not toString-ed like top-level objects
> -----------------------------------------------------------
>
> Key: LANG-754
> URL: https://issues.apache.org/jira/browse/LANG-754
> Project: Commons Lang
> Issue Type: Bug
> Components: lang.builder.*
> Affects Versions: 2.5, 3.0.1
> Environment: Linux Ubuntu
> java version "1.6.0_24"
> Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
> Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mode)
> Reporter: Dominique De Vito
> Priority: Minor
> Fix For: 3.2
>
> Attachments: LANG-754.patch
>
> Original Estimate: 24h
> Remaining Estimate: 24h
>
> I have a simple class 'A' defined as follows:
> ======================================
> public class A {
> int p1;
> String p2;
> B b;
> }
> ======================================
> While I execute the following instructions:
> ToStringBuilder builder = new ReflectionToStringBuilder(a);
> System.out.println(builder.toString());
> The output is:
> A@3ea981ca[p1=0,p2=<null>,b=B@1ee7b241]
> that's normal, without recursion
> So, I defined my own style, for recursive toString-ing display:
> ======================================
> class MyStyle extends ToStringStyle {
> private final static ToStringStyle instance = new MyStyle();
> public MyStyle() {
> setArrayContentDetail(true);
> setUseShortClassName(true);
> setUseClassName(true);
> setUseIdentityHashCode(true);
> setFieldSeparator(", ");
> }
> public static ToStringStyle getInstance() {
> return instance;
> };
> @Override
> public void appendDetail(final StringBuffer buffer, final String fieldName, final Object value) {
> if (!value.getClass().getName().startsWith("java")) {
> buffer.append(ReflectionToStringBuilder.toString(value, instance));
> } else {
> super.appendDetail(buffer, fieldName, value);
> }
> }
> @Override
> public void appendDetail(final StringBuffer buffer, final String fieldName, final Collection value) {
> appendDetail(buffer, fieldName, value.toArray());
> }
> }
> ======================================
> When I use my custom MyStyle:
> String s = ReflectionToStringBuilder.toString(a, MyStyle.getInstance());
> System.out.println(s);
> The output is:
> A@3ea981ca[p1=0, p2=<null>, b=byte@1ee7b241[p4=234]]
> So, the name of the class 'B' is not displayed.
> I expected something like: b=B@1ee7b241[p4=234]
> Instead, the name of the class 'B' is replaced with 'byte'.
> I don't know why.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira