2013-12-18 6 views
1

나는이 제품을 더 이상 유지 관리하지 않는 공급 업체가 작성한 코드베이스 (old, Java 3)를 유지 관리하고 있습니다.명시 적 캐스팅 리턴

나는 정기적으로이 같은 일에 실행하고 있습니다 :

private boolean doSomething() { 
    boolean success = false; 
    // do stuff 
    if (/*some stuff*/) { 
     success = true; 
    } 
    return success; 
} 

public void doStuff() { 
    boolean ok = (boolean) doSomething(); 
    if (ok) { 
     // do stuff 
    } 
} 

그래서, 분명히 그들은 다시 상태 (검증)를 나타내는 boolean를 전달하여 실패/방법의 성공을 결정하기 위해 노력하고있다 ... 나는 개인적으로는 생각 나쁜 습관, 나는 오히려 발신자에게 예외적 인 거품을 줄 것이다. 그러나 그것은 단지 나다.

내가 혼란스러워하는 부분은 왜이 공급 업체가 부울 반환 값을 부울로 명시 적으로 명시 적으로 캐스팅 했습니까? 이것은 중복되고 런타임 동안 확실히 오버 헤드가 발생합니다. 나는이 모든 시간을 잘못하고있다!? - 아니면 내가 관심을 기울여야하는 문체 같은 것입니까?

답변

1

런타임시 오버 헤드가 발생하지 않기 때문에 컴파일러에 캐스트가 있습니다. 하지만 불필요합니다. 당신이 필요로 그것은 좋은 스타일 무엇의 아이디어를 얻기 위해 다른 사람의 코드를 읽을 수있다 아주 잘하고있는 언어를 모르는 사람의 특이한 불확실성의

if (doSomething()) { 
    // do stuff 
} 

입니다.

+0

전달 방법 성공 상태가 C에서 나 같은 느낌 ... – SnakeDoc

+0

@SnakeDoc : 아마도. C 언어를 제외하고 그는 int를 반환하고 그것을 0으로 비교할 것입니다. 사람들이 생각하는 것을 말하기는 어렵습니다. –

+0

또는 그들이 전혀 생각하지 않는다면 ... – SnakeDoc

1

"나쁜 습관"으로 간주 될 수 있으며 리턴 유형은 분명 부울입니다.

그들은 유형 안전성을 유지하기 위해이 작업을 수행했을 가능성이 가장 높았으며, 자신의 특권이었습니다. 아마도 공급 업체는 반환 유형이있는 모든 메소드를 캐스팅하여 실제로 해당 유형을 확보하고 있는지 확인하는 컨벤션을 가졌을 수 있습니다.

1

캐스트는 런타임이 아닌 컴파일 타임에 발생하므로 예상 할 수있는 성능 저하가 발생하지 않습니다. 그것은 코드베이스의 단순한 부분입니다.