2011-01-21 3 views
5
class Address 
{ 
    private enum Component 
    { 
    NUMBER, 
    STREET, 
    STATE, 
    COUNTRY 
    } 

    private Map<Component, String> componentToValue = ...; 
} 

나는 두 가지 방법을 포함하도록 내 수업을하고 싶습니다 :toString() : 디버깅 또는 인간을위한?

  1. 하나는 (아무 잘못되면 내가 디버깅 할 수 있습니다) 각 주소 구성 요소의 값을 나타냅니다.
  2. 사람이 예상하는 형식으로 주소를 반환하는 사람 : "1600 Amphitheatre Parkway Mountain View, CA 94043".

Object.toString()의 모범 사례는 무엇입니까? # 1 또는 # 2의 주된 의미입니까? 이 방법의 명명에 가장 적합한 방법이 있습니까? 물론

public String toString(boolean debug) { 
    if (debug) return debugStringVersion; 
    else return humanVersion; 
} 

public String toString() { 
    return toString(Util.DEBUG); 
} 

이 당신이 그것을에서 디버그 플래그 유틸리티 클래스 양의 지방을 가지고 있다고 가정 : 당신이 할 수있는

답변

13

로 이동? 영어, 프랑스어, 일본어로 같은 방식으로 포맷 하시겠습니까?

아니요, 그렇다면 대답이 있습니다. 프레젠테이션은 개체에 속하지 않고 개체를 표시하는 표현 계층에 속합니다. 예를 들어 HtmlI18nedAddress 인 경우와 같이 개체가 프레젠테이션 계층 용으로 특별히 만들어지지 않은 경우 디버깅을 위해 toString을 사용합니다.

DateSimpleDateFormat을 고려하십시오. Date에는 상태가 포함되고 SimpleDateFormat은 여러 표현을 반환합니다.

+1

SimpleDateFormat과 Date (또는 다른 관련 예제)에 대해 언급하면이 대답을 수락 된 것으로 표시합니다. – Gili

-1

한 가지는 당신이 원하는대로 변경할 수있는 디버그 플래그를 사용합니다.

+3

나에게 의미가 없나요? 디버깅하는 동안 반환 값을 변경하면 생산 코드에서 toString()을 어떻게 사용해야합니까? – lweller

+0

@lweller. 항상 그렇게 할 수는 없습니다. 그러나 때때로 그것은 매우 도움이 될 수 있습니다. – jjnguy

3

내가 먼저 말할 것입니다. 데이터 서식을 개체의 ToString() 함수에 하드 코딩해서는 안됩니다.

이 방법은 다음과 같습니다. 일치하는 Parse (문자열 데이터) 함수에서 읽을 수있는 ToString() 출력 데이터를 만들려고합니다 (해당 함수가 실제로 존재하는지 여부는 중요하지 않음). 따라서이 경우 특정 서식을 원하면 특정 함수를 작성하고 일반 데이터 덤프 루틴을 ToString()으로 유지하십시오.

0

동적 .: 구성하는 일부 디버그 속성에서 읽을 수

@Override 
public String toString() { 

    if(debug) { 
     return debugAddrString() 
    } 
    return normalAddrString(); 

} 
+0

나는 펀치에 맞았다는 것을 알았다! –

+1

나에게 의미가 없나요? 디버깅하는 동안 반환 값을 변경하면 생산 코드에서 toString()을 어떻게 사용해야합니까? – lweller

+0

C 정의를 에뮬레이트하는 것처럼 보입니다. – helpermethod

-1

Javadoc는 말한다 : 일반적으로

, 「텍스트로 는 표현한다」캐릭터 라인을 돌려줍니다 toString 메소드 이 객체. 결과는 사람이 쉽게 읽을 수있는 간결하지만 유익한 표현이어야합니다.

그래서 난 당신이 SMS 메시지와 HTML 페이지에서 같은 방법으로 주소를 포맷 하시겠습니까 2.

+4

네, 의심 스럽지만 객체를 "텍스트로 표현"한다고 생각합니다. 그러나 내 마음 속의 질문은 "어떤 목적으로"입니까? 그리고 그 주된 목적은 디버깅을위한 것이라고 생각합니다. –

0

일반적으로 디버그 정보에만 ToString을 사용해야합니다.Object에서 메소드를 재정의하고 있습니다. 사람이 읽을 수있는 주소를 돌려주는 Object 참조에서 메서드 호출을하는 것이 개념적으로 정확합니까? 경우에 따라 프로젝트에 따라 실제로 이해할 수 있지만 조금 이상하게 보입니다. 나는 새로운 방법을 구현할 것이다.

또 다른 주목할 점은 가장 현대적인 IDE는 ToString 메서드를 사용하여 개체를 검사 할 때 개체에 대한 디버그 정보를 인쇄한다는 것입니다.

+0

IBTD. 'StringBuilder'는 첫 번째 문장에 대해 무엇을 말합니까? 그것의'.toString()'은 실제로 디버깅을 위해서만 사용 되는가? – glglgl