자바 실체 클래스 재 작성 toString () 방법

4416 단어 자바
실체 클래스 는 로 그 를 인쇄 할 때 인자 의 정 보 를 출력 하 는 toString () 방법 을 다시 써 야 합 니 다.그러나 실체 류 의 모든 속성 과 속성 치 를 수 동 으로 연결 하 는 것 이 귀 찮 으 면 다음은 자주 사용 하 는 몇 가지 방법 입 니 다.
Apache 도구 클래스 ToStringBuilder 사용 하기
 //  1                (       )
@Override
public String toString() {
    return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
}

출력 정보 가 password 와 같은 특수 필드 를 걸 러 내 려 면 다음 과 같은 방식 을 사용 할 수 있 습 니 다.
@Override
public String toString() {
 return (new ReflectionToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE) {
        @Override
 protected boolean accept(Field f) {
            return super.accept(f) && !f.getName().equalsIgnoreCase("password"); //       
        }

    }).toString();
}

ToStringBuilder 도구 클래스 는 다음 과 같은 몇 가지 디 스 플레이 방식 이 있 습 니 다.
/ 대상 및 속성 줄 표시
ToStringBuilder.reflectionToString(this);
ToStringBuilder.reflectionToString(u, ToStringStyle.DEFAULT_STYLE)
/ / 속성 줄 바 꿈 표시
ToStringBuilder.reflectionToString(u, ToStringStyle.MULTI_LINE_STYLE)
/ / 속성 명 을 표시 하지 않 고 속성 값 만 표시 합 니 다. 같은 줄 에 표시 합 니 다.
ToStringBuilder.reflectionToString(u, ToStringStyle.NO_FIELD_NAMES_STYLE)
/ / 대상 이름 약자
ToStringBuilder.reflectionToString(u, ToStringStyle.SHORT_PREFIX_STYLE)
/ / 대상 이름 을 표시 하지 않 고 속성 만 표시
ToStringBuilder.reflectionToString(u, ToStringStyle.SIMPLE_STYLE)
--------------------------------------------------------------------------------------------
또 다른 toString () 을 다시 쓰 는 방법 은 반사 체 제 를 이용 하여 실체 류 의 모든 속성 과 방법 을 얻 고 다음 과 같이 실현 하 는 것 이다.
public class ToStringUtil{
    /**
     *          fieldName,            
     * @param entity
     * @param fieldName
     * @return
     */
    public static String toString(Entity entity, String... fieldName)
    {
        Class cls = entity.getClass();
        StringBuffer buffer = new StringBuffer(cls.getSimpleName() + ": ");

        try
        {
            //       
            Method[] methods = cls.getMethods();
            if(null != fieldName && fieldName.length != 0)
            {
                for(Method method: methods)
                {
                    String mn = method.getName();
                    for(String fn: fieldName)
                    {
                        if(mn.equalsIgnoreCase("get" + fn))
                        {
                            String value = method.invoke(entity).toString();
                            buffer.append(mn + "=" + value + " &");
                        }
                    }
                }
            }
            else
            {
                //    field
                Field[] fields = cls.getDeclaredFields();
                for(Method method: methods)
                {
                    String mn = method.getName();
                    for(Field field: fields)
                    {
                        String name = field.getName().toString();
                        if(mn.equalsIgnoreCase("get" + name))
                        {
                            String value = method.invoke(entity).toString();

                            buffer.append(name + "=" + value + " &");
                        }
                    }
                }
            }

        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

        return buffer.substring(0, buffer.length()-1).toString();
    }

}

좋은 웹페이지 즐겨찾기