2013-06-05 3 views
10

이 프로젝트의 모든 곳에서 널리 사용되는 클래스가있는 거대한 프로젝트가 있습니다. 이 클래스는 많은 정보를 출력하는 메서드 인 toString()을 정의합니다. 다른 메소드, 예를 들어 toShortString()을 정의하고이 메소드 호출로 원본 toString()이 호출 된 모든 항목을 대체하려고합니다. order이 객체의 인스턴스와 orders입니다toString() 메서드를 모두 찾으십시오.

log.debug("Order issued: " + order); 
log.debug("Loaded list of orders: " + orders); 

은 객체의 목록입니다

문제는 다음과 같은 코드가 많이 있다는 것입니다.

그런 경우를 모두 확인할 수있는 방법이 있습니까?

모든 의견을 환영합니다. 중요하다면 IDE는 IntelliJ Idea입니다.

+1

특정 개체에 대해 'toString()'호출을'toShortString()'호출로 완전히 바꾸시겠습니까? 너 자신의 물건이야? 'toString()'을 오버라이드 (override) 할 수 없습니까? 현재의'toString()'구현으로 돌아갈 가능성이 있습니까? – Gamb

+0

intellij 백 로그에 관한이 미해결 문제는 귀하가 찾고있는 것을 설명하는 것으로 보입니다 : http://youtrack.jetbrains.com/issue/IDEABKL-3992 –

+1

단순히 '주문'을 '주문'으로 대체 할 수 없습니다. toShortString'. –

답변

3

Order 클래스의 toString() 메소드 본문을 재정의하십시오.

모두으로 전화하는 것은 기술적으로 불가능합니다. 시스템 라이브러리도 모든 종류의 콜렉션과 마찬가지로 많은 곳에서 toString()을 호출하기 때문에 호출됩니다. 또한 당신은 당신의 템플릿에주의를 기울여야한다 (당신이 사용하는 어떤 GUI).

그래서, 당신은 로그 짧은 인쇄물, 및 디버그 전체 (원본)로합니다. 둘 다 toString()입니다. 그런 다음 호출 스택 추적을 들여다보고 호출 위치를 결정할 수 있습니다. 현재 스택 추적에 액세스하려면 Thread.currentThread().getStackTrace()을 사용하십시오.

말하자면, 마지막 10 개의 stacktrace 요소 중 하나라도 사용자가 Log 클래스에서 가져온 것이면 로깅을 위해 호출 된 다음 짧은 인쇄물을 인쇄 할 수 있습니다. 그렇지 않으면 전체 출력을하십시오.

예, toString()의 다른 버전을 다른 방법으로 옮기는 것이 좋습니다.

+0

이 경우 디버거에서이 객체의 상태에 대한 정보가 손실됩니다. –

+0

나는 * state *가 손실되지 않는다고 생각한다. 필자는 Idea에 익숙하지 않지만 이클립스에서는 특정 클래스에 대한 시각화를 정의 할 수있다. 아마도 Idea에서도 비슷한 방식이있을 것이다. – gaborsch

+0

답변 해 주셔서 감사 드리며, 저는 toString() 메소드를 변경하겠습니다. –

4

대신 (당신은 확실히 몇 가지를 놓칠 것)가 발생하기 쉬운 오류 일 것이다 toString()의 모든 발행 수를 교체하고 정말 어려운 교체의 내가 제안 (예를 들어, ListOrder의 개체에 대한 System.out.println() 항상 toString() 만 호출 할 것이다) toString() 자체를 수정하여 toShortString()으로 호출합니다. toLongString()라고하고 Order 객체에 대한 자세한 String 표현을 가질 필요를 느끼지 곳이 함수를 사용하는 다른 함수 toString() 내부

이동 모든 코드.

+0

답변 해 주셔서 감사 드리며, 저는 toString() 메소드를 변경하겠습니다. –

0

는 내가 조금 늦게 해요 알지만, IDEA에서 그 일을 합법적 인 방법으로 발견 @Deprecated로 클래스 마크 내부 toString 방법을

  1. 합니다.
  2. Analyze ->Run inspection by name -> select Deprecated API usage.

비올라!사용이 중단 된 API의 모든 용도를 나열하며 (잘하면 해당 작업을 수행하지 않음) 방금 언급 한 toString을 포함합니다. 주석을 삭제하는 것을 잊지 마십시오.

P.

관련 문제