2016-10-24 7 views
1
public boolean sendDeviceEvent() { 
    boolean status = false; 
    try { 
     device.sendEvent("blah...blah"); 
     status = true; 
    } catch (Exception e) { 
     log.error("Failed to send NodeLowBattery Event - {} {}", createNodeLowBatteryNotification(), e.getCause()); 
    } finally { 
     return status; 
    } 
} 

나는 위의 코드가 마침내 돌아 오는 것이므로 나쁜 관행으로 간주 될 수 있음을 알고 싶습니다. 바이트 코드 정보를 기반으로 최종적으로 갑자기 반환되지 않고 마지막으로 값이 설정되지 않습니다. 어떻게 이것이 나쁜 것으로 간주 될 수 있습니까?마지막으로 Java에서보기

+4

여기서 '마지막'의 요점은 무엇입니까? 잡은 후에 상태를 반환 할 수 있습니다. – AntoineB

답변

4

요점은 다음과 같습니다. finally 문은 아무 의미가 없습니다. 코드에 이없고 값이 추가됩니다. 이 버전 :

try { 
... 
return true; 
} catch (...) { 
log ... 
} 
return false; 

매우 똑같습니다. 당신이 생각하기 시작하지 않고 : 그게 뭐야 마침내에 좋은가요?

다른 말로하면 : 기능을 사용하지 마십시오.; 가독성을 잊어서을 잊어 버리십시오. 당신은 가능한 한 빨리 진행되고있는 것을 이해할 수 있기를 원합니다. 을 사용하면 결국을 사용하여 확실히 "뇌의 CPU"스핀을 "더 세게"만들 수 있습니다. 단지 그것을 읽어야하고, 그런 다음 "아, 실제로는 전혀 필요하지 않습니다"라고 해석해야하기 때문입니다.

물론 이것은 매우 미묘합니다. 그러나 결국 : 조금 더 명확해질 수있는 미묘한 것들로 가득 찬 파일 ... 그것이 있어야하는 것보다 여전히 읽기가 더 어려운 파일을 만듭니다!

마지막으로 : 오해하지 마세요. finally 블록에서 돌아 오는 것이 의미가있는 경우가있을 수 있습니다. 하지만 - 그 블록에서 다른 일이 일어날 때만 (즉, 실제에는 그 블록이 필요합니다).