2013-03-06 4 views
0

try/catch 블록에서 변수를 초기화하더라도 변수가 초기화되지 않는다는 문제가 있습니다.try/catch 내부에서 초기화가 발생하면 Eclipse가 초기화되지 않은 컴파일 시간 오류를 발생합니다.

내가 가진 코드는 다음과 같습니다 그러나

public String doSomething(String input1, String input2) { 
    CustomizedObject myobject = new CustomizedObject(); 
    try { 
     Output out = (Output) myobject.getOutput(); 
    } catch (IOException e) { 
     System.err.println("Error: " + e.getMessage()); 
    } 
    return out.doSomethingString(input1, input2); 
} 

, 내가 로컬 변수를 만들 필요가 있다고 말하고있다 "알아."

내 CustomizedObject에 대한 코드는 다음과 같습니다 : 당신은 try/catch 블록 내부의 Output out을 초기화 할 수 없습니다

public class CustomizedObject { 

    private String attribute; 

    public CustomizedObject() { 
     attribute = "awesome"; 
    } 

    public String getOutput() throws IOException { 
     //.....code doing some stuff...... 
     return attribute; 
    } 
} 
+0

오류 메시지가 사용자 코드와 일치하지 않습니다. 코드에서의 문제는'out'은'try' 블록 밖에서 * 선언되지 않은 (즉, 범위를 벗어났습니다)지만, "초기화 된"오류 메시지는 그것이 선언되었지만 값. 실제 문제를 나타내는 코드를 항상 게시해야하며 실제 컴파일 오류 메시지를 축 어적으로 게시해야합니다 (오류 메시지가있는 다른 사람들이 Google에 오류 메시지를 표시 할 수있는 경우에만 해당) . – ruakh

답변

3

. IOException가 발생하면 위의 코드는 NullPointerException를 던질 것으로,

public String doSomething(String input1, String input2) { 
    CustomizedObject myobject = new CustomizedObject(); 
    Output out = null; 
    try { 
     out = (Output) myobject.getOutput(); 
    } catch (IOException e) { 
     System.err.println("Error: " + e.getMessage()); 
    } 
    return out.doSomethingString(input1, input2); 
} 

주, 다음을 시도하십시오 따라서 out == null 일 경우 out.doSomething을 원하지 않을 것입니다.

2

코드에서 Output out = (Output) myobject.getOutput();에 예외가 발생하면 return 문을 실행할 수 없습니다. 기존 return을 try 내부로 이동하고 try가 catch를 반환하면 별도의 리턴 값을 가져야합니다.

public String doSomething(String input1, String input2) { 
    CustomizedObject myobject = new CustomizedObject(); 
    try { 
     Output out = (Output) myobject.getOutput(); 
     return out.doSomethingString(input1, input2); 
    } catch (IOException e) { 
     System.err.println("Error: " + e.getMessage()); 
     return "Something went wrong"; 
    } 
}