2014-11-10 3 views
-1

Apache Common Lang ReflectionToStringBuilder를 사용하여 재귀 적으로 엔티티의 toString을 제공하고 있습니다.ReflectionToStringBuilder를 사용하여 특정 유형의 출력을 변경하십시오.

약간 수정 된 출력을 제공하기 위해 사용하는 사용자 지정 ToStringStyle이 있는데, 표시하지 않으려는 일부 변수를 생략했습니다.

제 질문은 특정 개체 유형에 대한 것입니다. 인쇄 할 특정 특성을 지정할 수 있습니까?

예 : 두 개의 Person 개체에 각각 ID 값이 있고 Relationship 개체에 BestFriend가 있습니다.

public class Person { 

int id; 
String name; 
int age; 
Person bestfiend; 


public void setBestFriend(Person bestFriend){ 
    this.bestfiend = bestFriend; 
    } 
} 

현재 무슨 일이 일어나고 있는지, 내가 Bestfriends로 두 사람 개체를 연결할 때, ReflectionToStringBuilder는 친한 친구의 값에 대한 전체 사람 개체를 쓰고있다.

Person[ 
id = 0001 
name = John 
age = 25 
[email protected][ 
       id = 0002 
       name = Mary 
       age = 29 
       ] 
] 

모든 관계 개체에 대해 전체 Person 개체가 아니라 ID 값을 제공하도록 지정할 수 있습니까?

Person[ 
id = 0001 
name = John 
age = 25 
bestFriend= 0002 
+0

'ReflectionToStringBuilder' 클래스는 필드를 제외하고 인쇄 방법을 변경하는 것만 허용합니다. ToStringBuilder 클래스를 사용하여'toString()'메소드 내에서'Person'을 출력하는 방법을 정의 할 수 있습니다. –

+0

안녕하세요, 저는 이미 클래스에 ToStringStyle을 확장하여 클래스를 구현하여 필수 출력을 제공 할 수 있습니까 (주로 서식 지정)? – Newmanater

+0

아마도 약간의 털이 나올 지 모르지만 그렇게 할 수는 있습니다. 'ToStringBuilder' 대신'ReflectionToStringBuilder'를 사용해야하는 이유가 있습니까? 후자의 경우 가장 친한 친구의 ID 필드를 추가하는 것이 훨씬 쉬울 것입니다. –

답변

4

다음 코드 스 니펫은 가장 친한 친구 필드를 선택적으로 제외하고 ID 값을 추가하는 방법을 보여줍니다. NPE를 피하려면 null을 확인해야합니다.

@Override 
public String toString() { 
    ReflectionToStringBuilder builder = new ReflectionToStringBuilder(this); 
    builder.setExcludeFieldNames("bestfriend"); 
    builder.append("bestfriend", (bestfriend == null) ? "None" : bestfriend.id); 
    return builder.build(); 
} 
관련 문제