2011-12-22 4 views
2

에 대한 일반적인 함수에 정상적인 기능을 변환 코드 리뷰 주석을 얻음) debug 조건이 ON이 아니더라도 class 문자열 변환 객체가 발생합니다. 여러 곳에서 원치 않는 성능 저하로 이어질 것입니다.나는 다음과 같은 로깅 기능을 구현했다 최적화

나는 if() 조건을 도처에 두어 코드를 어지럽히고 싶지 않습니다. 단지 output이 중요하고 나머지는 반복됩니다. Java 기능을 사용하여이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

내가 사용하는 제네릭의 생각 :

<T> void log (String output, T arg) 
{ 
    if(debug) 
    { 
    String val = <some string captured>; 
    Log.write("Logging: " + val + output + arg.toString(), this.handle); 
    } 
} 

이 방법이 좋은 최적화를 할 것인가? 또한이 generic 함수를 우아하게 확장하여 여러 인수를 사용할 수 있습니까?

답변

4

사실, 당신도 제네릭이 필요하지 않습니다 - 당신이 Object를 사용할 수 있습니다 당신은 예를 들어, 변수 인수 및 MessageFormat을 사용할 수 있습니다

void log (String output, Object arg) { ... } 

여러 개체를 들어, 다음과 같이

void log (String pattern, Object... args) { 
    if (debug) { 
     Log.write(MessageFormat.format(pattern, args)); 
    } 
} 

.

log("value is {0} {1}", str, val); 
+0

+1 멋진 대답. 한가지 추가 질의 :'debug' 조건없이'log' 함수가 호출됩니다. 그 점에 대해서도 코드 검토 의견을 얻을 수 있습니다. 함수 호출을 저장하는 것조차도 조기에 최적화 될 것이라고 말할 수 있습니까? (참고 : 실행 중에 함수가 여러 번 호출 됨) – iammilind

+0

@ iammilind : 잘 모르겠습니다. 일반적인 방법은 함수 호출을 중심으로 디버그 조건을 설정하는 것입니다. 아무 것도하지 않는 함수를 호출하면 성능이 심각하게 저하되지 않아야합니다. – axtavt

+0

알겠습니다. 로그가'if()'조건으로 묶인 전형적인 접근법을 유지하는 것이 낫습니다. 감사. – iammilind

관련 문제