2009-11-25 3 views
12

의 말을하자 내가 할 수있는 문장의 집합 :Java : Try-Catch-Continue?

try { 
    String a = getProperty("a"); 
    String b = getProperty("b"); 
    String c = getProperty("c"); 
} catch(Exception e) { 

} 

지금, 재산 b는 찾을 수 없습니다 말할 수와 함수가 예외가 발생합니다. 이 경우 각 속성에 대해 try-catch 블록을 작성하지 않고도 b를 null로 설정하는 방법은 무엇입니까? 내 말은, a, b, c가 존재하지만 언젠가는 예외가 발생하지 않을 수도 있습니다.

답변

19

속성을 찾을 수 없을 때 null을 반환하도록 함수를 변경할 수 없다고 가정하면 try try catch 블록에서 모든 것을 래핑 할 수 있습니다. 특히 모든 값을 원할 경우 (. 전체 작업을 취소 실패 첫 번째 값을시키는 반대) 검색 할 수 인출 된

당신이 검색 할 이러한 속성을 많이 가지고 있다면, 아마도 사용하는 도우미 메서드를 작성하는 청소기 될 것이다 :

String getPropertySafely(String key) { 
    try { 
     return getProperty(key); 
    } catch (Exception e) { 
     return null; 
    } 
} 
+0

이것은 매우 흥미롭게 보입니다! 감사합니다 – Legend

+1

자카르타 커먼즈 IO (IOUtils 클래스의 closeQuietly 메소드)에서 해당 명명 규칙을 사용하기 때문에 "getPropertyQuietly"라고합니다. –

+4

+1 라비 (Ravi) - 주요 애완 동물이 예외를 삼키고 있습니다. 그렇게 할 계획이라면 적어도 메서드의 이름에 따라 명확히해야합니다. (Clean Code) – Elliot

7

각 문장 주위에 try-catch를 넣어야합니다. VB에서 ON ERROR ... RESUME 블럭에있는 것과 같이 계속 진행이 없습니다. 대신에 :

String a = null; 
try { 
    a = getProperty("a"); 
} catch(Exception e) { 
    ... 
} 
String b = null; 
try { 
    b = getProperty("b"); 
} catch(Exception e) { 
    ... 
} 
String c = null; 
try { 
    c = getProperty("c"); 
} catch(Exception e) { 
    ... 
} 

당신은 쓸 수 :

개인적으로
public String getPropertyNoException(String name) { 
    try { 
    return getProperty(name); 
    } catch (Exception e) { 
    return null; 
    } 
} 

나는 getProperty()이 같은를 사용하고 있기 때문에 단지이 모든 여분의 상용구에 대한 예외를 던지기 위해 가난한 후보가

+1

아 ... 간단한 접근 방식을 사용하여 도망 갈 수 있다고 생각했습니다. 감사합니다 ... – Legend

+1

예 ... 그 getProperty는 다른 라이브러리에서 가져온 것이므로 실제로 그 부분을 만지길 원치 않았습니다. – Legend

5

이 필요하다고 생각 함수를 루프에 넣을 때마다 함수를 호출하면됩니다.

String[] abc = new String[3]; 
String[] param = {"a", "b", "c"}; 
for (int i = 0; i < 3; i++) { 
    try { 
     abc[i] = getProperty(param[i]); 
    } catch(Exception e) { 

    } 
} 

하지만 다소 고안되어 많은 수의 속성에만 유용합니다. 나는 당신이 3 try-catch를 간단하게 써야한다고 생각합니다.

3

getProperty의 처리 방법을 재고해야합니다. 그것을 할 수있는 평범한 방법이 아닙니다.

finally 문을 악용 할 수 있지만 모든 통화마다 여전히 try-catch이 필요합니다.

관련 문제