簡體   English   中英

當在try / catch中進行初始化時,Eclipse給出未初始化的編譯時錯誤

[英]Eclipse giving uninitialized compile time error when initialization occurs inside 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);
}

但是,這就是說我需要創建一個局部變量“ out”。

我的CustomizedObject的代碼如下:

public class CustomizedObject {

   private String attribute;

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

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

您不能在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);
}

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

如果您的代碼在Output out = (Output) myobject.getOutput();處引發異常Output out = (Output) myobject.getOutput(); ,它將無法執行return語句。 您應該將現有的return移至嘗試的內部,如果嘗試返回捕獲,則應單獨獲得退貨。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM