2013-03-06 58 views
0

我在與那告訴我,即使我一個try/catch塊中初始化它的變量未初始化代碼塊麻煩內發生給未初始化的編譯時錯誤。的日食在初始化的try/catch

我的代碼是:

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的代碼如下:

public class CustomizedObject { 

    private String attribute; 

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

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

您的錯誤消息與您的代碼不符。你的代碼的問題是'out'在'try'-block之外是*未聲明的(即超出範圍),但是「初始化的」錯誤信息意味着它被聲明瞭,但可能沒有值。你應該總是發佈代碼來證明你遇到的實際問題,並且你應該總是發佈實際的編譯錯誤消息,逐字(如果只是讓其他人在發現錯誤消息時能夠找到答案) 。 – ruakh 2013-03-06 01:50:49

回答

3

不能初始化try/catch塊內的Output out。嘗試以下方法:

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); 
} 

注意,上面的代碼將拋出一個NullPointerException如果IOException拋出;所以你可能不想out.doSomething如果out == null

2

如果你的代碼拋出的Output out = (Output) myobject.getOutput();一個例外,它不會是能夠執行return語句。您應該將現有的return移至嘗試內部,並且如果嘗試返回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"; 
    } 
}